一个AI初学者尝试制作专业人生小姐姐机器人

这篇文章是《2016年职业少女临时工Advent Calendar》第10天的文章。

首先

由于这本身就是一个微妙的AI问题,所以标题可能也是错误的可能性。
我收集了Pro生的Twitter发言,尝试制作了一个Pro生ChatBot。
如果在Slack中这样发言,Pro生会回复你这样的东西。

スクリーンショット 2016-12-08 16.55.42.png

经过

在公司的 Slack 上,有一个叫做某博主的 Bot 频道被创建了出来,听说他正在用 Twitter 制作 ChatBot。这就意味着我们只能从 Pro 生的 Twitter 上制作 ChatBot!因此,我们开始动手制作了。

试试做一下

据说可以按照以下大致流程来制作。

    1. 使用Twitter的爬虫将发言内容整理到数据库中,

 

    1. 将数据库的数据输入到ElasticSearch,

 

    使用Python的SlackBot将发言内容传递给ElasticSearch,并将返回的文本输出。

由于几乎所有同事都已经制作好了酱料,所以我只是直接使用了他们的酱料,因此这次跳过了详细的说明…

准备好

由于不想在本机上运行Elasticsearch等,所以这次我们将使用Vagrant在CentOS上进行设置并运行。

Vagrant的准备工作(CentOS)

cd <適当なディレクトリ>
mkdir pronama-chan-bot && cd $_
vagrant init <CentOSのBoxファイル名>
vagrant up
vagrant ssh
sudo yum update -y

从现在开始,在CentOS内进行工作。

Java的安装

由于安装所述的分析工具-kuromoji似乎需要Java,因此需要安装Java。

sudo yum install -y wget
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.rpm
sudo rpm -ivh jdk-8u65-linux-x64.rpm
java -version

安装ElasticSearch

※ ElasticSearch 是什么

据说Elastic公司提供了一种全文搜索引擎(用于从大量文档数据中搜索包含目标词的文档数据的机制)。

请参考这个链接进行安装

sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
sudo vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
sudo yum install -y elasticsearch

安装ElasticSearch的插件

# 日本語の全文検索対応のためにkuromojiをインストール
sudo /usr/share/elasticsearch/bin/plugin install analysis-kuromoji

# neologdというipa辞書の拡張版?とやらを使うのでインストール
sudo /usr/share/elasticsearch/bin/plugin install org.codelibs/elasticsearch-analysis-kuromoji-neologd/2.4.1

# 結果をWebブラウザで見ることが出来るプラグイン
sudo /usr/share/elasticsearch/bin/plugin install polyfractal/elasticsearch-inquisitor

# ElasticSearchのモニタリングが出来るプラグイン
sudo /usr/share/elasticsearch/bin/plugin install royrusso/elasticsearch-HQ

※ 我在搜索引擎上查找并写下了每个插件的说明,所以可能存在错误的可能性m(_ _)m

ElasticSearch的配置设定

sudo vi /etc/elasticsearch/elasticsearch.yml

请按照以下方式进行更改

http.compression: true
network.publish_host: "0.0.0.0"
network.host: "0.0.0.0"
network.bind_host: "0.0.0.0"
transport.tcp.port: 9300
transport.tcp.compress: true
http.port: 9200

启动设置

sudo chkconfig elasticsearch on
sudo service elasticsearch start

使用pyenv进行Python的安装

sudo yum install -y git
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
pyenv install anaconda3-4.1.1
pyenv rehash
pyenv global anaconda3-4.1.1
python --version

※ 这里只是简单解释,因为我们只是简单地执行了同事的源代码。

执行Twitter爬虫

使用Python的Twitter API库tweepy,获取过去的时间线并存储到数据库中。

# Twitter APIの設定
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

# TLの取得(全てのTLが取得出来るまで以下を実行)
statuses = api.user_timeline('pronama', max_id = None, count = 200)

#  取得したデータをDB保存用に加工
# 省略 

# 取得したTLをDBに保存
# 省略

将爬取结果的数据库输入ElasticSearch。

设置模板吗?

将JSON设置为localhost:9200/_template/,然后就可以了。
在模板中设置索引名称,并进行了如kuromoji等分词器的设置。我对这部分还不太了解,所以稍后会进行调查(不需要进行旗标)。

一旦删除索引。

如果将localhost:9200/删除,就可以了。

将从数据库中取出的数据暂时保存到JSON文件中。

使用Python将数据库中的数据转换为JSON。

将json数据进行批量插入

在本地主机上的9200端口上通过POST方法将<json数据>以二进制数据发送到/speech/_bulk。

因为到目前为止ElasticSearch本身应该已经在运行,所以我们尝试运行以下命令来确认结果是否返回。

curl -XGET 'http://localhost:9200/<index_name>/_search?pretty' -d '
{
  "query": {
      "function_score": {
          "functions": [
              {
                  "random_score": {
                    "seed" : "999999999"
                  }
              }
          ], 
          "query": {
              "query_string": {
                  "query": "text.kuromoji:<テキスト>^100 OR text.2gram:$<テキスト>^10"
              }
          }, 
          "score_mode": "multiply"
      }
  }, 
  "size": 1, 
  "sort": {
      "_score": {
          "order": "desc"
      }
  }, 
  "track_scores": true
}
'
スクリーンショット 2016-12-08 19.41.22.png

太好啦!虽然回应是“Ya-hoo”,但好像起作用了!

SlackBot的设置

然后,将其设置为SlackBot。

在Slack上注册Bot用户

你可以通过”Add Configuration”来注册Bot用户。每个项目都可以随意填写。本次我们将以”@pronama_chan”的名字进行注册。

スクリーンショット 2016-12-08 13.49.30.png

请务必将在下一个页面显示的“API Token”记下来。

スクリーンショット 2016-12-08 13.50.09.png

在Slack上创建一个Bot频道

スクリーンショット 2016-12-08 13.48.20.png

不要忘记邀请使用↑创建的@pronama_chan。

スクリーンショット 2016-12-08 13.52.25.png

创造一个SlackBot

让我们使用Python的Slackbot库创建一个Slack Bot。

from slackbot.bot import Bot
from slackbot.bot import respond_to,default_reply

bot_response(userid, word):
    # ElasticSearchにPOSTする
    response = requests.post(
        'http://{}/{}/_search'.format(hostname, index_name),
        <wordから生成したElasticSearchに投げるJSON文字列>.encode('utf-8'))

    # POSTしたものから
    return <responseからhitした文字列を抽出したもの>

@respond_to('(.*)')
def chat(message, word):
    response = bot_response(message._get_user_id(), word)
    message.reply(response)

def main():
    bot = Bot()
    bot.run()

if __name__ == "__main__":
    main()

我试着做了一下

我试着从Slack发送

スクリーンショット 2016-12-08 16.55.42.png

开心地大喊:终于来了!(≧▽≦)/

最后

在Web上,我作为一个AI初学者,终于成功地创建了名为“Prosei”的聊天机器人。虽然使用了平时不怎么用到的技术,但是感觉既有趣又累人啊。。。

スクリーンショット 2016-12-08 20.20.36.png

以上!

广告
将在 10 秒后关闭
bannerAds