我们想从一个简单的搜索社区和各个城市的街道中进行识别。我们不仅使用英语,还使用其他各种西里尔语言。我们需要能够识别位置的拼写错误。在查看 python 库时,我发现了这个: http: //polyglot.readthedocs.io/en/latest/NamedEntityRecognition.html
我们尝试使用它,但找不到扩展实体识别数据库的方法。怎么可能呢?
如果没有,对于多语言 nlp 是否有任何其他建议可以帮助进行拼写检查并提取与自定义数据库匹配的各种实体?
我们想从一个简单的搜索社区和各个城市的街道中进行识别。我们不仅使用英语,还使用其他各种西里尔语言。我们需要能够识别位置的拼写错误。在查看 python 库时,我发现了这个: http: //polyglot.readthedocs.io/en/latest/NamedEntityRecognition.html
我们尝试使用它,但找不到扩展实体识别数据库的方法。怎么可能呢?
如果没有,对于多语言 nlp 是否有任何其他建议可以帮助进行拼写检查并提取与自定义数据库匹配的各种实体?
看看HuggingFace的预训练模型。
以下是文档中的一些示例代码,针对您的用例稍作修改:
from transformers import pipeline
typo_checker = pipeline("ner", model="mrm8488/distilbert-base-multi-cased-finetuned-typo-detection",
tokenizer="mrm8488/distilbert-base-multi-cased-finetuned-typo-detection")
result = typo_checker("я живу в Мосве")
result[1:-1]
#[{'word': 'я', 'score': 0.7886862754821777, 'entity': 'ok', 'index': 1},
#{'word': 'жив', 'score': 0.6303715705871582, 'entity': 'ok', 'index': 2},
#{'word': '##у', 'score': 0.7259598970413208, 'entity': 'ok', 'index': 3},
#{'word': 'в', 'score': 0.7102937698364258, 'entity': 'ok', 'index': 4},
#{'word': 'М', 'score': 0.5045614242553711, 'entity': 'ok', 'index': 5},
#{'word': '##ос', 'score': 0.560469925403595, 'entity': 'typo', 'index': 6},
#{'word': '##ве', 'score': 0.8228507041931152, 'entity': 'ok', 'index': 7}]
result = typo_checker("I live in Moskkow")
result[1:-1]
#[{'word': 'I', 'score': 0.7598089575767517, 'entity': 'ok', 'index': 1},
#{'word': 'live', 'score': 0.8173692226409912, 'entity': 'ok', 'index': 2},
#{'word': 'in', 'score': 0.8289134502410889, 'entity': 'ok', 'index': 3},
#{'word': 'Mo', 'score': 0.7344270944595337, 'entity': 'ok', 'index': 4},
#{'word': '##sk', 'score': 0.6559176445007324, 'entity': 'ok', 'index': 5},
#{'word': '##kow', 'score': 0.8762879967689514, 'entity': 'ok', 'index': 6}]
不幸的是,它似乎并不总是有效,但也许它对于您的用例来说已经足够了。
另一种选择是SpaCy。他们没有针对不同语言的那么多模型,但是使用SpaCy 的 EntityRuler可以很容易地手动定义新实体,即“扩展实体识别数据库”。