在原始文本上或在 lemma/stemming 处理之后计算单词 n-gram?

Compute word n-grams on original text or after lemma/stemming process?

我正在考虑对原始文本使用单词 n-gram 技术。但我有个疑问:

在文本上应用 lemma/stemming 后,使用单词 n-gram 是否有意义?如果不是,为什么我应该只在原始文件上使用单词 n-gram?优缺点是什么?

在词形化或词干化之后计算单词 n-grams 的原因与词干化之前的原因相同。有时这会让您出现误报,例如 (D3),但它通常会以您想要这样做的有意义的方式增加召回率。

在某些领域,例如短文本,词干提取可能会造成伤害。最好的办法是测试,但总的来说,我会建议词干提取和大小写折叠,但这实际上取决于您的域和查询。

Q="criminal records"

  • D1 = "...有犯罪 记录 ..."(词干匹配)
  • D2 = "...释放了 犯罪 记录 ..."(正常匹配)
  • D3 =“...在 'Smooth Criminal' 上工作时,录音 ...”(词干上的错误匹配)

这是一个 precision/recall 的权衡。您可以(始终)通过词干提取来提高召回率,并且可以通过不提取词干来提高准确率。但这取决于您所服务的查询类型。例如,如果您是 运行 代码搜索,您几乎从不想要提取或预处理,因为用户希望输入准确的符号名称然后找到它们。