vespa.ai 中的自然语言处理

Natural language processing in vespa.ai

{ "yql": "select * from sources post where text contains \"brandmüller\";", "locale": "en" }

查询没有产生预期的结果。 如果我将查询从 brandmüller 更改为 Brandmüller(titlecase)或将 locale 更改为 de,一切正常。

不可否认,这个功能很聪明,因为Brandmüller是对的。但出于某些原因,我宁愿简单地忽略这个案例。是否有禁用查询 api?

中的 uppercase/lowercase 功能的选项

参见 https://docs.vespa.ai/documentation/linguistics.html - 这很可能是规范化的一个特征

在查询中添加&tracelevel=5很有用(一些数字,in/decrease根据需要)查看查询处理的效果

大多数情况下,保留默认处理是您想要的(即小写)。可以在查询处理链中排除搜索者,但是,一旦有了处理跟踪就更容易讨论

https://docs.vespa.ai/documentation/text-matching-ranking.html#match-configuration-debug 很有用,请参阅同一文档中的 vespa-index-inspect / vespa-attribute-inspect 以了解如何查看术语的索引方式

您可以通过添加 tracelevel=3

检查查询处理、解析、词干提取等

例如

https://api.cord19.vespa.ai/search/?query=Brandm%C3%BCller&tracelevel=3

Stemming: [select * from sources * where default contains ([{"origin": {"original": "Brandm\u00FCller", "offset": 0, "length": 11}, "stem": false}]"brandm\u00FCller") timeout 1999;]

https://api.cord19.vespa.ai/search/?query=Brandm%C3%BCller&tracelevel=3&language=de

"Stemming: [select * from sources * where default contains ([{"origin": {"original": "Brandm\u00FCller", "offset": 0, "length": 11}, "stem": false}]"brandmull") timeout 1997;]" },

大小写应该没有区别,但词干提取取决于语言,例如,对于 brandmüller 和 Brandmüller,brandmüller 将被词干化为 brandmull。

Vespa 中的匹配不区分大小写,但词干提取和规范化不区分大小写(通常)。

我想这里的数据是用语言环境 "de" 索引的,当你用语言环境 "en" 查询时,你会得到不同的(错误的)词干,但仅限于小写版本。您可以使用 tracelevel 验证这一点(tracelevel=1 就足够了)。

一般来说,如果您只有一种语言,最好始终将区域设置明确设置为该语言(默认情况下,区域设置是猜测的,但这对于非常短的文本(例如许多查询)来说并不可靠)。如果您要处理多种语言,事情就会变得有点复杂。