Using BERTopic on Chinese and Japanese Texts

uttx8gqw  于 5个月前  发布在  其他
关注(0)|答案(5)|浏览(54)

你好,马腾。在使用BERTopic分析中文和日文文本时,我想提一个问题。如果我们运行以下代码来分析中文或日文:

from bertopic import BERTopic
topic_model_multi = BERTopic(language="multilingual", calculate_probabilities=True, verbose=True)
topics_multi, probs_multi = topic_model_multi.fit_transform(texts)

我们将得到如下结果(在分析日文文本的情况下):

9_おめでとう_おはようございます_おはありです_ありがとうございます
10_10552100本祭は雨天時は29日へ順延タイムスケジュール等は後日流れるのでお待ちく...
11_野党がひたすら揚げ足取りをしているというのはどういうことでしょうか私は今通常国会開会か...

然而,这里的主题更像是句子而不是单词。经过一些研究,一些在线帖子指出,对于像英语或法语这样没有空格分隔的文本,我们需要首先将文本转换为类似的英文文本格式(单词之间有空格),然后使用BERTopic对转换后的文本进行分析。因此,我们不能直接在没有任何预处理的情况下启动BERTopic来分析中文或日文(没有空格分隔的文本)。

我想请教你对这个问题的看法。如果你同意我正在讨论的内容,能否做一个提醒,以便更多的人了解这一点?
非常感谢!

slmsl1lt

slmsl1lt1#

我在你的问答区找到了这篇帖子。所以我认为它回答了我关于中文文本的问题。它是否也适用于日语文本?
我如何使用BERTopic处理中文文档?
目前,CountVectorizer通过分割空格对文本进行分词,这对于中文来说是行不通的。为了让它起作用,你将不得不使用jieba创建一个自定义的CountVectorizer:

ozxc1zmp

ozxc1zmp2#

我在你的问答区找到了这篇帖子。所以我认为它回答了我关于中文文本的问题。它是否也适用于日语文本?
是的,对于日语文本的分词通用原则也适用于这里。你需要给CountVectorizer一个可以分词的日语文本的分词器,然后它应该可以工作。如果你有一个著名的日语分词器的示例,那么我可以将其添加到文档中。

alen0pnh

alen0pnh3#

感谢您的快速回复。一个例子是使用MeCab。您可以在这里找到它的文档:https://github.com/SamuraiT/mecab-python3
按照您的约定,我修改了您提供的中文文本示例:

from sklearn.feature_extraction.text import CountVectorizer
import MeCab

def tokenize_jp(text):
    
    words = MeCab.Tagger("-Owakati").parse(text).split()
    return words
vectorizer = CountVectorizer(tokenizer=tokenize_jp)
from bertopic import BERTopic
topic_model = BERTopic(language="japanese", calculate_probabilities=True, verbose=True, vectorizer_model=vectorizer)
topics, probs = topic_model.fit_transform(texts)

然后结果会更像主题。
示例:
4 _ああ_ドン_な_県
5_質問_匿名_募集_中
6_コンテンツ_論_応用_2020
7_first_sixtonesann_you_i

6kkfgxo0

6kkfgxo04#

很高兴听到分词器工作正常。我需要对在中文和日文文本上表现良好的分词器做更多的研究,并将这些添加到文档中。

mu0hgdu0

mu0hgdu05#

感谢您的努力。如果您在使用该工具分析日语或中文文本时有任何其他问题,请随时联系。我目前在日本进行自然语言处理研究,因此我很乐意提供帮助!期待更新的文档。

相关问题