如何对 3000-4000 字的大型文档进行语言表示以进行基于查询的检索?
How to do language representation on huge documents of 3000-4000 word for query-based retrieval?
我正在尝试实施语义搜索以从非结构化法语文档数据集中检索相似文档。
- 这些文档未分类,是模板,每个文档包含 300 - 3000 个单词。
- 我正在使用 doc2vec 使用 gensim 来查找具有 300 个维度和数据集的 window 5 的段落嵌入。
- 然后我将最多 5 个词的搜索查询转换为 300 维的向量,并比较余弦距离以找到接近搜索查询的文档。
我没有得到好的结果。请提出一些进行语义搜索的策略。我试图通过提取 rake 关键字来减少数据集中的单词数量。
如果查询太短而无法被 doc2vec 嵌入,结果不佳的原因。如果你只关心性能,我会推荐使用一些现成的信息检索工具,比如 Lucene。
如果您想玩转神经网络和嵌入,您可以执行以下操作:
只需使用词嵌入,例如来自 FastText。删除查询和文档中的停用词并用平均词嵌入表示它们并通过余弦距离进行比较。
如果你不太在意效率,你也可以试试多语言BERT(在Transformers library) or brand new French model called CamemBERT中可用。在这种情况下,你只需使用[cls]
向量并对它们做余弦距离。
我将从在 Elasticsearch 中为您的文档编制索引开始。他们使用 TF-IDF 的开箱即用方法非常棒。
如果您希望使用神经网络进行更复杂的 "semantic search",我推荐 NBoost。您可以 pip install nboost
它会在 Elasticsearch 之外创建一个语义搜索引擎。
我正在尝试实施语义搜索以从非结构化法语文档数据集中检索相似文档。
- 这些文档未分类,是模板,每个文档包含 300 - 3000 个单词。
- 我正在使用 doc2vec 使用 gensim 来查找具有 300 个维度和数据集的 window 5 的段落嵌入。
- 然后我将最多 5 个词的搜索查询转换为 300 维的向量,并比较余弦距离以找到接近搜索查询的文档。
我没有得到好的结果。请提出一些进行语义搜索的策略。我试图通过提取 rake 关键字来减少数据集中的单词数量。
如果查询太短而无法被 doc2vec 嵌入,结果不佳的原因。如果你只关心性能,我会推荐使用一些现成的信息检索工具,比如 Lucene。
如果您想玩转神经网络和嵌入,您可以执行以下操作:
只需使用词嵌入,例如来自 FastText。删除查询和文档中的停用词并用平均词嵌入表示它们并通过余弦距离进行比较。
如果你不太在意效率,你也可以试试多语言BERT(在Transformers library) or brand new French model called CamemBERT中可用。在这种情况下,你只需使用
[cls]
向量并对它们做余弦距离。
我将从在 Elasticsearch 中为您的文档编制索引开始。他们使用 TF-IDF 的开箱即用方法非常棒。
如果您希望使用神经网络进行更复杂的 "semantic search",我推荐 NBoost。您可以 pip install nboost
它会在 Elasticsearch 之外创建一个语义搜索引擎。