[英]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:长文档转换器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.