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 就足够了)。
一般来说,如果您只有一种语言,最好始终将区域设置明确设置为该语言(默认情况下,区域设置是猜测的,但这对于非常短的文本(例如许多查询)来说并不可靠)。如果您要处理多种语言,事情就会变得有点复杂。
{
"yql": "select * from sources post where text contains \"brandmüller\";",
"locale": "en"
}
查询没有产生预期的结果。
如果我将查询从 brandmüller
更改为 Brandmüller
(titlecase)或将 locale
更改为 de
,一切正常。
不可否认,这个功能很聪明,因为Brandmüller
是对的。但出于某些原因,我宁愿简单地忽略这个案例。是否有禁用查询 api?
参见 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 就足够了)。
一般来说,如果您只有一种语言,最好始终将区域设置明确设置为该语言(默认情况下,区域设置是猜测的,但这对于非常短的文本(例如许多查询)来说并不可靠)。如果您要处理多种语言,事情就会变得有点复杂。