【问题标题】:fasttext models detecting norwegian text as danish [closed]fasttext 模型将挪威文本检测为丹麦语 [关闭]
【发布时间】:2025-11-24 10:20:03
【问题描述】:

我正在使用 fasttext (v=0.9.1) 来检测文本的语言(请参阅 this)。

使用此模型时,挪威语文本被检测为丹麦语。

!curl "https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.bin" > lid.bin

import fastText
language_detector=fastText.load_model('lid.bin')
language_detector.predict('Hei Jeg viser til hyggelig sam', k=3)

输出:

(('__label__da', '__label__no', '__label__hu'),
array([9.16624188e-01, 8.25065151e-02, 2.37607688e-04]))

有什么帮助吗?

【问题讨论】:

  • 我通常没有看到 FastText 用于语言检测。 (例如,我还没有看到常见的 FT 实现包括任何 API 调用,这些调用在传递文本时会返回语言标识符。)因此,显示您用于达成此决定的实际代码有助于阐明您的对于某些文本或语言,过程可能会成功/失败。
  • fasttext.cc/blog/2017/10/02/blog-post.html - 可用于检测语言。
  • 谢谢!如果这是您使用的特定多步技术,那么您在某些示例上的结果质量可能会受到您使用的训练数据的严重影响。您正在使用什么训练数据,您能否使用更大/更好的训练集来获得更好的结果? (甚至可能:每当您遇到已知错误时,包括正确标记的 NO 和 DA 版本的困难文本,并重新训练,以专门改进困难的情况?)
  • 我对 15k 丹麦样本和 700 个挪威样本进行了测试,准确率分别为 95% 和 80%,使用快速文本正确识别它们,请参阅:npmjs.com/package/@smodin/fast-text-language-detection 研究数据

标签: fasttext language-detection


【解决方案1】:

看来区分挪威语和丹麦语很困难(见this)。

fastText 不是特别适合这个任务。

你可以尝试使用polyglot,一个专门用于多语言NLP的python库。

from polyglot.detect import Detector

detector = Detector('Hei Jeg viser til hyggelig sam')
print(detector)

输出:

Prediction is reliable: True
Language 1: name: Norwegian   code: no       confidence:  96.0 read bytes:  1189
Language 2: name: un          code: un       confidence:   0.0 read bytes:     0
Language 3: name: un          code: un       confidence:   0.0 read bytes:     0

一点注意:如果你安装了 polyglot,请注意依赖关系(阅读 thisthis)。

【讨论】:

  • 谢谢@anakin87。将在性能、模型大小等方面进行检查。
  • 我编辑了你的问题。当工作人员重新打开它时,请接受我的回答。
  • @anakin87 - 很遗憾,您的编辑无效。这不是 OP 的原始问题,编辑不应该那么极端。您的建议从来都不是 OP 问题的一部分,因此也不属于那里。
  • @DavidMakogon 也许你是对的,但在编辑中我只添加了 mahala 使用但未报告的代码。