成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

微信公號(hào)DIY:訓(xùn)練微信聊天機(jī)器人&公號(hào)變身圖片上傳工具

anonymoussf / 1234人閱讀

摘要:使用圖靈機(jī)器人訓(xùn)練之前在對(duì)比聊天機(jī)器人實(shí)現(xiàn)方案的時(shí)候,我試用過(guò)圖靈機(jī)器人,他們號(hào)稱中文語(yǔ)境下智能渡最高的機(jī)器人大腦。

上一篇 一小時(shí)搭建微信聊天機(jī)器人 介紹了如何搭建一個(gè)可用的聊天機(jī)器人,但是和機(jī)器人聊完你會(huì)發(fā)現(xiàn),聊天機(jī)器人實(shí)在是太傻了,來(lái)回就那么幾句。這是因?yàn)槲覀兘o聊天機(jī)器人的數(shù)據(jù)太少,他只能在我們給的訓(xùn)練集中找它認(rèn)為最合適的。那么,如何導(dǎo)入更多的訓(xùn)練數(shù)據(jù)呢?
我能想到最簡(jiǎn)單的方法是找對(duì)話的數(shù)據(jù),然后把這些數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)訓(xùn)練機(jī)器人。

感謝 candlewill 已經(jīng)收集好了大量的訓(xùn)練數(shù)據(jù),dialog_corpus https://github.com/candlewill/Dialog_Corpus 。

這個(gè)庫(kù)中包含電影臺(tái)詞、中英文短信息、自然語(yǔ)言處理相關(guān)的數(shù)據(jù)集、小黃雞語(yǔ)料等。這里我選擇電影臺(tái)詞語(yǔ)料。

語(yǔ)料地址為:dgk_lost_conv:https://github.com/rustch3n/dgk_lost_conv

chatterbot 訓(xùn)練邏輯處理模塊

這個(gè)模塊提供訓(xùn)練機(jī)器人的方法,chatterbot自帶了通過(guò)輸入list來(lái)訓(xùn)練(["你好", "你好啊"] 后者是前者的回答)以及通過(guò)導(dǎo)入Corpus格式文件來(lái)訓(xùn)練的方式。

這里我們選擇使用第一種,通過(guò)輸入list來(lái)訓(xùn)練機(jī)器人。

處理訓(xùn)練數(shù)據(jù)

首先下載數(shù)據(jù)集:

wget https://codeload.github.com/rustch3n/dgk_lost_conv/zip/master
# 解壓
$ unzip dgk_lost_conv-master.zip

我們先打開一個(gè)文件看下數(shù)據(jù)結(jié)構(gòu):

E
M 你得想想辦法 我弟弟是無(wú)辜的
M 他可是美國(guó)公民啊
M 對(duì)此我也無(wú)能為力
M 你當(dāng)然能
M 再去犯罪現(xiàn)場(chǎng)看看 定能證實(shí)清白
M 你看 我不過(guò)是個(gè)夜間辦事員而已
M 你若真想解決問(wèn)題
M 最好等領(lǐng)事來(lái)
M 他早上才上班
M 我很抱歉
E
M 那我自己來(lái)搞定
M 你兄弟
M 關(guān)在哪個(gè)監(jiān)獄?
M 索納監(jiān)獄
E
M 怎么了?
M 那里關(guān)的都是最窮兇極惡的罪犯
M 別的監(jiān)獄都不收

.conv 語(yǔ)料文件中:E 是分隔符 M 表示會(huì)話。因?yàn)槲沂鞘褂幂斎雔ist 的方式訓(xùn)練數(shù)據(jù),這時(shí)我可以以分隔符E為分隔,將一段對(duì)話放入一個(gè)list中,那么上述例子中的訓(xùn)練數(shù)據(jù)應(yīng)該被格式化為:

convs = [
    [
       "你得想想辦法 我弟弟是無(wú)辜的",
       "他可是美國(guó)公民啊",
       "對(duì)此我也無(wú)能為力",
       "你當(dāng)然能",
       "再去犯罪現(xiàn)場(chǎng)看看 定能證實(shí)清白",
       "你看 我不過(guò)是個(gè)夜間辦事員而已",
       "你若真想解決問(wèn)題",
       "最好等領(lǐng)事來(lái)",
       "他早上才上班",
       "我很抱歉"
    ],
    [
       "那我自己來(lái)搞定",
       "你兄弟",
       "關(guān)在哪個(gè)監(jiān)獄?",
       "索納監(jiān)獄",
    ],
    [
       "怎么了?",
       "那里關(guān)的都是最窮兇極惡的罪犯",
       "別的監(jiān)獄都不收",
    ]
]

導(dǎo)入訓(xùn)練數(shù)據(jù)的腳本如下:

from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer

# 初始化聊天機(jī)器人
momo = ChatBot(
    "Momo",
    storage_adapter="chatterbot.storage.MongoDatabaseAdapter", # 使用mongo存儲(chǔ)數(shù)據(jù)
    logic_adapters=[ # 指定邏輯處理模塊
            "chatterbot.logic.BestMatch",
            "chatterbot.logic.MathematicalEvaluation",
            "chatterbot.logic.TimeLogicAdapter",
        ],
    input_adapter="chatterbot.input.VariableInputTypeAdapter",
    output_adapter="chatterbot.output.OutputAdapter",
    database="chatterbot", # 指定數(shù)據(jù)庫(kù)
    read_only=True
)

# 讀取.conv 數(shù)據(jù)文件,因?yàn)槲曳?wù)器配置較低,所以選擇了一個(gè)內(nèi)容較少的文件
# 這個(gè)函數(shù)是一個(gè)生成器
def read_conv(filename="prisonb.conv"):
    with open(filename, "rt") as f:
        conv = []
        # 逐行讀取
        for line in f:
            _line = line.replace("
", "").strip()  # 預(yù)處理字符串 去掉首位空格
            if _line == "E":  # 如果是分隔符 表示對(duì)話結(jié)束 返回對(duì)話列表
                yield conv
                conv = []  # 重置對(duì)話列表
            else:  # 不是分隔符則將內(nèi)容加入對(duì)話列表
                c = _line.split()[-1]  # 其實(shí)這里如果對(duì)話中包含空格 對(duì)話數(shù)據(jù)會(huì)不完整,應(yīng)該只去掉M和開頭的空格
                conv.append(c)


def traine_momo():
    for conv in read_conv():
        print(conv)
        momo.set_trainer(ListTrainer) # 指定訓(xùn)練方式
        momo.train(conv) # 訓(xùn)練數(shù)據(jù)


def main():
    traine_momo()


if __name__ == "__main__":
    main()

這個(gè)腳本比較簡(jiǎn)單,只是簡(jiǎn)單的將數(shù)據(jù)從對(duì)話文件中讀取出來(lái),然后拼接為對(duì)話列表輸入聊天機(jī)器人。

由于這里對(duì)話大部分都是多行數(shù)據(jù),聊天機(jī)器人匹配結(jié)果時(shí)運(yùn)算量會(huì)大幅提升,我單核cpu的服務(wù)器在導(dǎo)入一個(gè)700k 的語(yǔ)料文件后每次聊天都會(huì)讓cpu飚到100%!?? 無(wú)奈之下只能刪掉大半數(shù)據(jù)。

對(duì)話示例如圖:

導(dǎo)入電影臺(tái)詞后,雖然訓(xùn)練數(shù)據(jù)大幅提升,但是你會(huì)發(fā)現(xiàn)聊天機(jī)器人開始答非所問(wèn)了,這是因?yàn)榱奶鞌?shù)據(jù)噪音太大,對(duì)白也有點(diǎn)問(wèn)題。

使用圖靈機(jī)器人訓(xùn)練

之前在對(duì)比聊天機(jī)器人實(shí)現(xiàn)方案的時(shí)候,我試用過(guò) 圖靈機(jī)器人,他們號(hào)稱中文語(yǔ)境下智能渡最高的機(jī)器人大腦。他們的對(duì)話比我自己的搭建的靠譜很多,那么我們是不是可以利用一下他的數(shù)據(jù)呢?

我的方案是這樣的,在圖靈機(jī)器人新建兩個(gè)機(jī)器人教練A 和 教練B,讓兩個(gè)機(jī)器人互相對(duì)話,然后把訓(xùn)練數(shù)據(jù)導(dǎo)入chatterbot。

打開 http://www.tuling123.com,注冊(cè)賬號(hào)

新建兩個(gè)機(jī)器人(免費(fèi)用戶最多可以創(chuàng)建5個(gè),每個(gè)機(jī)器人每天最多請(qǐng)求5000次)

調(diào)用對(duì)話API,讓兩個(gè)機(jī)器人互相聊天

建好機(jī)器人后的界面:

訓(xùn)練示例代碼如下:

# tuling_trainer.py
import sys
from time import sleep

from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer

import requests

API_URL = "http://www.tuling123.com/openapi/api"
API_KEY0 = ""  # 機(jī)器人1 的key
API_KEY1 = ""  # 機(jī)器人2 的key

# 初始化chatterbot
momo = ChatBot(
    "Momo",
    storage_adapter="chatterbot.storage.MongoDatabaseAdapter",
    logic_adapters=[
            "chatterbot.logic.BestMatch",
            "chatterbot.logic.MathematicalEvaluation",
            "chatterbot.logic.TimeLogicAdapter",
        ],
    input_adapter="chatterbot.input.VariableInputTypeAdapter",
    output_adapter="chatterbot.output.OutputAdapter",
    database="chatterbot",
    read_only=True
)

# 請(qǐng)求圖靈機(jī)器人接口
def ask(question, key, name):
    params = {
        "key": key,
        "userid": name,
        "info": question,
    }
    res = requests.post(API_URL, json=params)
    result = res.json()
    answer = result.get("text")
    return answer


def A(bsay):
    # 打印 A 和 B 的對(duì)話內(nèi)容
    print("B:", bsay)
    answer = ask(bsay, API_KEY0, "momo123")
    print("A:", answer)
    return answer


def B(asay):
    print("A:", asay)
    answer = ask(asay, API_KEY1, "momo456")
    print("B", answer)
    return answer


def tariner(asay):
    momo.set_trainer(ListTrainer)  # 設(shè)置處理方式
    while True:  # 兩個(gè)機(jī)器人訓(xùn)練的主循環(huán)
        conv = []
        conv.append(asay) # 先把 A 說(shuō)的第一句加入到對(duì)話列表
        bsay = B(asay)  # A 先問(wèn) B
        conv.append(bsay) # 將B 的回答加入到對(duì)話列表
        momo.train(conv) # 將對(duì)話用于訓(xùn)練
        print(conv)
        conv = []
        conv.append(bsay) # 用B的對(duì)話 去問(wèn) A 步驟和上述方式一致
        asay = A(bsay)
        conv.append(asay)
        momo.train(conv)
        print(conv)
        sleep(5)  # 控制頻率


def main(asay):
    tariner(asay)


if __name__ == "__main__":
    main(*sys.argv[1:])  # 接收參數(shù)作為開始的第一句話
    
# 執(zhí)行腳本
# python tuling_trainer.py 你好?

使用圖靈聊天機(jī)器人訓(xùn)練的時(shí)候是需要監(jiān)測(cè)的,因?yàn)槿绻麅蓚€(gè)機(jī)器人說(shuō)的內(nèi)容一樣的時(shí)候,機(jī)器人可能會(huì)一直重復(fù)同一句話,直到調(diào)用次數(shù)耗盡,你需要看一下兩個(gè)機(jī)器人的對(duì)話是否陷入了僵局。

當(dāng)然也可以在程序中加入判斷,先多設(shè)定幾個(gè)開始打招呼的句子,如果一句話連續(xù)出現(xiàn)多次的時(shí)候,換下一個(gè)句子糾正他們。

以下是我訓(xùn)練了兩天之后的結(jié)果:

雖然還是答非所問(wèn),但是已經(jīng)比之前像樣了。

圖靈聊天機(jī)器人免費(fèi)版每天可調(diào)用5000 次,如果覺得次數(shù)太少可以多新建幾個(gè)輪流使用

聊天機(jī)器人的配置及訓(xùn)練方式就到這里了,接下來(lái)介紹個(gè)更實(shí)用的功能,如何讓微信公號(hào)變成圖床。

如何讓微信公號(hào)化身圖片上傳助手

在使用 markdown 格式來(lái)寫文章的過(guò)程中,發(fā)現(xiàn)圖片地址是一個(gè)比較麻煩的事情,每次貼圖獲取圖片URL都是一個(gè)比較麻煩的過(guò)程。
以我使用的七牛為例,獲取圖片地址的步驟如下:

登錄七牛網(wǎng)站,打開存儲(chǔ)空間>內(nèi)容管理

上傳文件

返回內(nèi)容管理找到剛才上傳的文件,獲取外鏈

按照這個(gè)步驟上傳一張圖片至少耗時(shí)半分鐘。

那能不能簡(jiǎn)化這個(gè)步驟呢?

答案是可以!

微信公號(hào)是可以發(fā)送圖片消息的,我的做法是

將圖片發(fā)送到公號(hào)

服務(wù)器獲取觸發(fā)圖片消息的處理邏輯> 將圖片使用七牛提供的第三方資源抓取API另存到,七牛存儲(chǔ)空間

將設(shè)定好的圖片地址返回給微信,發(fā)送到公號(hào)消息對(duì)話中

示例如下圖所示:

實(shí)現(xiàn)步驟

注冊(cè)個(gè)七牛賬號(hào)

新建存儲(chǔ)空間

在個(gè)人中心秘鑰管理獲取 AccessKey 和 SecreKey

pip install qiniu

代碼實(shí)現(xiàn)如下:

# media.py
# 圖片抓取邏輯處理
from qiniu import Auth, BucketManager

from momo.settings import Config

def qiniu_auth():
    access_key = str(Config.QINIU_ACCESS_TOKEN)
    secret_key = str(Config.QINIU_SECRET_TOKEN)
    auth = Auth(access_key, secret_key)
    return auth
    
def media_fetch(media_url, media_id):
    """抓取url的資源存儲(chǔ)在庫(kù)"""
    auth = qiniu_auth()
    bucket = BucketManager(auth)
    bucket_name = Config.QINIU_BUCKET  # 存儲(chǔ)空間名稱
    ret, info = bucket.fetch(media_url, bucket_name, media_id) # 參數(shù)依次是第三方圖片地址,空間名稱,目標(biāo)文件名
    if info.status_code == 200:
        return True, media_id # 如果上傳成功,返回文件名
    return False, None

抓取第三方圖片文檔地址為:第三方資源抓取 https://developer.qiniu.com/kodo/api/1263/fetch。

微信圖片消息處理邏輯代碼:

class WXResponse(_WXResponse):

    def _image_msg_handler(self):
        media_id = self.data["MediaId"]
        picurl = None
        if not picurl:
            picurl = self.data["PicUrl"]  # 從消息中獲取圖片地址
        is_succeed, media_key = media_fetch(picurl, media_id) # 使用圖片抓取接口將圖片存儲(chǔ)到七牛并獲取圖片文件名
        if is_succeed:
            qiniu_url = "{host}/{key}".format(host=Config.QINIU_HOST, key=media_key) # 拼接圖片地址
        else:
            qiniu_url = "圖片上傳失敗,請(qǐng)重新上傳"
        self.reply_params["content"] = qiniu_url # 返回圖片地址
        self.reply = TextReply(**self.reply_params).render()

代碼已開源道github,詳細(xì)代碼邏輯參考 gusibi/momo: https://github.com/gusibi/momo/tree/chatterbot

歡迎試用體驗(yàn):

請(qǐng)不要上傳高清圖片,微信會(huì)壓縮損壞圖片質(zhì)量

也不要上傳太個(gè)人的圖片,畢竟內(nèi)容我能看到

總結(jié)

這一篇主要提供了兩個(gè)訓(xùn)練 chatterbot 的思路,以及使用公號(hào)作為圖片上傳客戶端提高上傳圖片的效率的解決方法。
接下來(lái)公號(hào)還是繼續(xù)開發(fā),準(zhǔn)備給公號(hào)加一個(gè)記賬功能,促使自己養(yǎng)成記賬的習(xí)慣。

預(yù)告

下一篇的公號(hào)DIY 將介紹 記賬的功能設(shè)計(jì)以及實(shí)現(xiàn)思路


最后,感謝女朋友支持。

歡迎關(guān)注(April_Louisa) 請(qǐng)我喝芬達(dá)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/38702.html

相關(guān)文章

  • 微信公號(hào)DIY:MongoDB 簡(jiǎn)易ORM & 公號(hào)記賬數(shù)據(jù)庫(kù)設(shè)計(jì)

    摘要:然后又介紹了基于的公號(hào)賬本應(yīng)用的數(shù)據(jù)庫(kù)設(shè)計(jì)。歡迎關(guān)注公號(hào)四月試用。 前兩篇 微信公號(hào)DIY 系列: 微信公號(hào)DIY:一小時(shí)搭建微信聊天機(jī)器人 微信公號(hào)DIY:訓(xùn)練聊天機(jī)器人&公號(hào)變身圖片上傳工具 介紹了如何使用搭建&訓(xùn)練聊天機(jī)器人以及讓公號(hào)支持圖片上傳到七牛,把公號(hào)變成一個(gè)七牛圖片上傳客戶端。這一篇將繼續(xù)開發(fā)公號(hào),讓公號(hào)變成一個(gè)更加實(shí)用的工具賬本(理財(cái)從記賬開始)。 代碼: 項(xiàng)目代...

    Backache 評(píng)論0 收藏0
  • 微信公號(hào)DIY:MongoDB 簡(jiǎn)易ORM & 公號(hào)記賬數(shù)據(jù)庫(kù)設(shè)計(jì)

    摘要:然后又介紹了基于的公號(hào)賬本應(yīng)用的數(shù)據(jù)庫(kù)設(shè)計(jì)。歡迎關(guān)注公號(hào)四月試用。 前兩篇 微信公號(hào)DIY 系列: 微信公號(hào)DIY:一小時(shí)搭建微信聊天機(jī)器人 微信公號(hào)DIY:訓(xùn)練聊天機(jī)器人&公號(hào)變身圖片上傳工具 介紹了如何使用搭建&訓(xùn)練聊天機(jī)器人以及讓公號(hào)支持圖片上傳到七牛,把公號(hào)變成一個(gè)七牛圖片上傳客戶端。這一篇將繼續(xù)開發(fā)公號(hào),讓公號(hào)變成一個(gè)更加實(shí)用的工具賬本(理財(cái)從記賬開始)。 代碼: 項(xiàng)目代...

    DoINsiSt 評(píng)論0 收藏0
  • 微信公號(hào)DIY:一小時(shí)搭建微信聊天機(jī)器人

    摘要:最近借用了女朋友的公號(hào),感覺如果只是用來(lái)發(fā)文章,太浪費(fèi)微信給提供的這些功能了。想了想,先從最簡(jiǎn)單的開始,做一個(gè)聊天機(jī)器人吧。是一款接口的,基于一系列規(guī)則和機(jī)器學(xué)習(xí)算法完成的聊天機(jī)器人。 最近借用了女朋友的公號(hào),感覺如果只是用來(lái)發(fā)文章,太浪費(fèi)微信給提供的這些功能了。想了想,先從最簡(jiǎn)單的開始,做一個(gè)聊天機(jī)器人吧。 使用Python實(shí)現(xiàn)聊天機(jī)器人的方案有多種:AIML、chatterBot以...

    source 評(píng)論0 收藏0
  • 微信公號(hào)生成便簽

    摘要:具體差異可以使用源碼測(cè)試一下還是有問(wèn)題優(yōu)化完圖片生成速度后,發(fā)現(xiàn)在長(zhǎng)文本狀態(tài)下,公號(hào)還是會(huì)超時(shí)報(bào)錯(cuò)。經(jīng)過(guò)檢查發(fā)現(xiàn)是圖片上傳到公眾平臺(tái)太慢了服務(wù)器只有帶寬,沒有辦法。 最近有文字轉(zhuǎn)圖片的需求,但是不太想下載 APP,就使用 Python Pillow 實(shí)現(xiàn)了一個(gè),效果如下: showImg(https://segmentfault.com/img/remote/1460000015565...

    Near_Li 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<