繁体   English   中英

使用 BERT 或 LSTM 模型的大型文档语义相似性的最佳方法

[英]Best approach for semantic similarity in large documents using BERT or LSTM models

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

但是,BERT 在处理长文档方面存在问题。 它只支持 512 的序列长度,但我所有的简历都超过 1000 字。 我真的被困在这里了。 截断文档等方法不适合此目的。

还有其他 model 可以做到这一点吗?

对于此任务,我找不到使用 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))

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

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

在这里,滑动 window 注意力机制使用n = 512标记,而不是 BERT model 中已知的将N=512标记作为输入序列长度。


Longformer:长文档转换器

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM