【问题标题】:Best approach for semantic similarity in large documents using BERT or LSTM models使用 BERT 或 LSTM 模型在大型文档中实现语义相似度的最佳方法
【发布时间】:2021-03-14 09:22:50
【问题描述】:

我正在尝试为 .pdf 格式的简历构建搜索应用程序。对于给定的搜索查询,例如“谁精通 Java 并在跨国公司工作”,输出应该是最相似的 CV。我的计划是阅读pdf文本并找到文本和查询之间的余弦相似度。

但是,BERT 存在长文档的问题。它支持的序列长度只有 512,但我所有的 CV 都超过 1000 个单词。我真的被困在这里了。截断文档之类的方法不适合目的。

有没有其他模型可以做到这一点?

我找不到像 Longformer 和 XLNet 这样的模型来完成这项任务的正确方法。

module_url = "https://tfhub.dev/google/universal-sentence-encoder/4" 
model = hub.load(module_url)
print ("module %s loaded" % module_url)

corpus = list(documents.values())
sentence_embeddings = model(corpus)
query = "who is profiecient in C++ and has Rust"
query_vec = model([query.lower()])[0]

doc_names = list(documents.keys())

results = []
for i,sent in enumerate(corpus):
  sim = cosine(query_vec, model([sent])[0])
  results.append((i,sim))
  #print("Document = ", doc_name[i], "; similarity = ", sim)

print(results)
results= sorted(results, key=lambda x: x[1], reverse=True)
print(results)

for idx, distance in results[:5]:
  print(doc_names[idx].strip(), "(Cosine Score: %.4f)" % (distance))

【问题讨论】:

  • 我认为,为您的问题添加一个简单的代码示例会更好。
  • @Nour-AllahHussein 代码已更新

标签: python bert-language-model language-model


【解决方案1】:

我建议您阅读:Beltagy、Iz、Matthew E. Peters 和 Arman Cohan。 “Longformer:长文档转换器。” arXiv 预印本 arXiv:2004.05150 (2020)。

本文的主要目标是它能够接收长文档序列标记作为输入,并且能够以线性计算成本处理整个文档的长期跨分区上下文。

这里,滑动窗口注意机制使用n = 512 标记,而不是 BERT 模型中已知的以N=512 标记作为输入序列长度的机制。


? Longformer:长文档转换器

GitHub:https://github.com/allenai/longformer

论文:https://arxiv.org/abs/2004.05150

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 2023-02-23
    • 2020-07-09
    • 2013-10-20
    • 2019-03-02
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多