⾃然语⾔处理(五)——实现机器翻译Seq2Seq完整经过参考书
《TensorFlow:实战Google深度学习框架》(第2版)
我只能说这本书太烂了,看完这本书中关于⾃然语⾔处理的内容,代码全部敲了⼀遍,感觉学的很绝望,代码也运⾏不了。
具体原因,我也写过⼀篇博客diss过这本书。可是既然学了,就要好好学呀。为了搞懂⾃然语⾔处理,我毅然决然的学习了⽹上的各位⼩伙伴的博客。这⾥是我学习的简要过程,和代码,以及运⾏结果。⼤家共勉。
参考链接:
⽬录
学习过程:
0. 数据准备
我⽤的数据就是参考链接⾥⾯的数据。即⼀个TED 演讲的中英字幕。
下载地址:
1. 数据切⽚
简单来说,就是,我们得到的⽂件⾥⾯都是⾃然语⾔,“今天天⽓很好。”这样的句⼦。我们⾸先要做的就是要将这些句⼦⾥的每⼀个字以及标点符号,⽤空格隔开。所以第⼀步就是利⽤⼯具进⾏⽂本切⽚。(具体⽅法看链接,这⾥不赘述)
我们要进⾏处理的⽂件是下⾯两个。
但是在这两个⽂件⾥⾯除了演讲内容中英⽂之外,还有关于演讲主题的⼀些信息,如下图。
我⽤正则表达式的⽅法(现百度现⽤)去除了这些介绍部分的⽂字。英⽂和中⽂只需要改变名字和路径就⾏了,下⾯贴代码:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# coding=utf-8
"""
@author: Li Tian
@contact:
@software: pycharm
@file: file_deal.py
@time: 2019/3/19 11:05
@desc: 对两个⽂件进⾏处理,将两个⽂件中的表头信息清除
"""
import re
def txt_clean(x):
pattern = re.compile(r'<\w*>|</\w*>')
result = pattern.arch(x)
return result
def main():
path = 'D:/Python3Space/Seq2SeqLearning/en-zh/'
# file = '-zh.en'
# save_path = 'D:/Python3Space/'
file = '-zh.zh'
save_path = 'D:/Python3Space/Seq2SeqLearning/train.zh'
path1 = path + file
output = open(save_path, 'w', encoding='utf-8')
with open(path1, 'r', encoding='utf-8') as f:
x = f.readlines()
for y in x:
result = txt_clean(y)
# print(result)
if result is None:
# print(y)
output.write(y)
output.clo()
if __name__ == '__main__':
main()
运⾏这个程序就能得到两个⽂件,分别是去除了介绍⽂字部分的英⽂和中⽂翻译:
内容如下(我不知道为什么截图之后图⽚变窄了,很难受):
接下来我们需要有那种每个元素都是由空格所分开的(包括所有符号)。在这⾥,我选取的中⽂和英⽂的分词⼯具都是stanfordcorenlp,相关知识请参考。
很绝望的是,我安装过程中Python还报错了:
为什么要选⽤斯坦福的⼯具
明明可以⽤nltk来对英⽂进⾏分词,⽤jieba对中⽂进⾏分词,可是当我搜到斯坦福这个⾃然语⾔处理⼯具的时候,我想了想,天啦,这个名字也太酷炫了吧,⼀看就很复杂啊,中英⽂⽤同⼀个库进⾏分词应该要⽐较好吧,我要搞定它。然后按照⽹上的教程,真的很容易的就安装了,然后很容易的就是实现对英⽂的分词了。可是!真的有毒吧!对中⽂进⾏分词的时候,我特么输出的是['', '', '', '']这种空值,⽆论怎么解决都没有办法,我真的要崩溃了。还好我看到了。嗯。。。写的⾮常不错,竟然有我各种百度都没找到的解决办法,简直是太开⼼了好吗!可是!
⾥⾯写的 corenlp.py 到底在哪⼉阿喂!
我哭了真的!
你们看,⾥⾯明明就只有⼀个叫corenlp.sh的⽂件好吗?打开之后⾥⾯也并不是知乎⾥⾯所说的内容
啊!
在这个令⼈绝望的关头!我灵光⼀闪。。。.py!.py!莫不是在python库⽂件⾥⾯。。。然后我就⽴马去python3⽬录下找。