由于深度学习硬件资源的稀缺性,所以了 PaddlePaddle 作为这次实操的框架平台,虽然 Paddle 在国际上的流行度比不上 tensorflow 等架构,但是在国内 Paddle 对于开发者还是非常友好的,尤其是入门级的同学,在 Paddle 社区里面可以用中文提问和探讨,相对上手门槛就低了很多,外加有不少中文教程,确实对小白们很友好。
另外,Paddle 上有免费的 GPU 资源可以用!!!
而且是 Telsa V100,没概念的可以自己搜一下这玩意儿多贵!!!
为什么说这是中文的第一步呢?
因为英文基本不用分词啊,本身就是一个个单词!
所以到了咱们中文这里,需要进行有意义的划分,把一个句子分成一个个有意义的“词语”(而不是“字”)
只有划分了“词语”,然后才可以把这些词语向量化,然后才可以做词嵌入,然后才可以做 NLP 中的后续等等等等操作!
分词模型有挺多种类的,比如我听说过的 Jieba 切词,效果也不错,这里在 Paddle 平台上,我就直接用现成的 LAC 分词模型了
该模型的 PaddleHub 地址:
Lexical Analysis of Chinese,简称 LAC 词法分析
该模型的论文地址:
Chinese Lexical Analysis with Deep Bi-GRU-CRF Network
跑程序前,必要的基础要安装好:
pip install paddlepaddle
pip install paddlehub
程序实现:
import paddlehub as hub
# 首先准备好我们要进行分词的素材
raw_data = [
["你觉得明天是个晴天吗","我看还是下雨的可能性大"],
["中国哪家公司的人工智能最牛呢"],
["我在山上看见爱因斯坦"],
["我把车把一把把住了"]
]
# 然后直接调用 PaddleHub 中现成的分词模型 LAC
lac = hub.Module(name="lac")
for texts in raw_data: # 每一次取一个列表中的 元素,这个 元素 是个 字符串 的 列表
results = lac.lexical_analysis(texts=texts, use_gpu=False, batch_size=1)
# lexical_analysis(texts=[], data={}, use_gpu=False, batch_size=1, user_dict=None, return_tag=True)
# lac预测接口,预测输入句子的分词结果
# texts(list): 待预测数据,如果使用texts参数,则不用传入data参数,二选一即可
# data(dict): 预测数据,key必须为text,value是带预测数据。如果使用data参数,则不用传入texts参数,二选一即可。
# 建议使用texts参数,data参数后续会废弃。
# use_gpu(bool): 是否使用GPU预测
# batch_size(int): 批处理大小
# user_dict(None): 该参数不推荐使用,请在使用lexical_analysis()方法之前调用set_user_dict()方法设置自定义词典
# return_tag(bool): 预测结果是否需要返回分词标签结果
# 返回结果:results(list): 分词结果是个列表
for result in results: # 取得结果列表中的一个元素
print(result)
# 这里 单个分词 的结果是个字典,其中两个key,一个是分词结果 "word",一个是词性标注 "tag"
运行结果如下:
{'word': ['你', '觉得', '明天', '是', '个', '晴天', '吗'], 'tag': ['r', 'v', 'TIME', 'v', 'q', 'n', 'xc']}
{'word': ['我', '看', '还是', '下雨', '的', '可能性', '大'], 'tag': ['r', 'v', 'd', 'v', 'u', 'n', 'a']}
{'word': ['中国', '哪家', '公司', '的', '人工智能', '最', '牛', '呢'], 'tag': ['LOC', 'r', 'n', 'u', 'n', 'd', 'a', 'xc']}
{'word': ['我', '在', '山上', '看见', '爱因斯坦'], 'tag': ['r', 'p', 's', 'v', 'PER']}
{'word': ['我', '把', '车', '把', '一把把', '住', '了'], 'tag': ['r', 'p', 'n', 'p', 'm', 'v', 'xc']}