最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

無需聯(lián)網(wǎng)/不需要ChatGPT的簡易版AI老婆教程:VITS+中文GPT2+機器翻譯+RenPy

2023-03-16 12:44 作者:豚骨拉面--  | 我要投稿

(注:本專欄只討論相關(guān)技術(shù),不涉及任何其他目的,如侵刪)

摘要

基于ChatGPT、VITS和Live2D的賽博女友/AI老婆最近越來越受到人們的關(guān)注。然而,使用ChatGPT時的步驟繁瑣、連接不穩(wěn)定等問題大幅降低了人們的使用體驗。針對該問題,本專欄介紹了一種基于VITS+中文GPT2+機器翻譯+RenPy的離線簡易版AI老婆,可以利用自己電腦的CPU/GPU實現(xiàn)與老婆的實時交互。需要聲明的是,受限于數(shù)據(jù)和設(shè)備,本次實現(xiàn)并未包含新的訓練過程,所有模型均使用網(wǎng)上開源的預訓練模型,因此最后的效果比較粗糙,遠不如各up主使用ChatGPT的版本,但也達到了我一開始的預期。本期專欄技術(shù)含量不高,只是給大家提供一個思路,歡迎批評指正和交流。

(注:本專欄較長,有一些操作細節(jié)可能描述過于細致,導致廢話較多,大家可能要做好心理準備)

前言(廢話)

今年年初,我在B站上看到有up主將ChatGPT和VITS模型結(jié)合起來,可以實現(xiàn)與AI老婆的自由對話:

我看完之后大受震撼,驚覺AI居然還有這樣的應(yīng)用(不覺得這很酷嗎?這很符合我對理工男浪漫的想象),便想著自己是不是也能嘗試一下,于是就有了后面的嘗試。雖然自己代碼能力很弱,也缺乏調(diào)參的經(jīng)驗,但在這個過程中確實受益匪淺。

后面我也注意到,B站上出現(xiàn)了越來越多的up主,用ChatGPT+VITS實現(xiàn)與二次元角色的實時對話,但我自己嘗試過一次后,對語音合成模型已經(jīng)沒有那么大的興趣,而且我對RenPy和Live2D也不熟悉,所以便擱置了自己搭建AI老婆的想法。

直到有一天,有人私信我,說能不能實現(xiàn)一個個性化訓練的AI老婆,可以裝進U盤里帶走,因為ChatGPT的API需要花錢購買和調(diào)試,有一點點不方便,希望能做個離線版的。我覺得這個想法有一定道理,這兩個星期趁著空閑做了一些嘗試,便有了這期專欄。

不過就我個人而言,這期專欄實際上并沒有什么技術(shù)含量,我只不過做了一些縫合,最后的效果也挺粗糙的,大家權(quán)當圖一樂。

(今早起來看到GPT4也出來了,不禁感慨AI發(fā)展之迅猛,我做的這點小兒科可能不一會就會被重新整合且大幅升級。好時代,來臨力)

整體思路

為了讓語音合成模型保持原汁原味,這里我使用的是日文的VITS模型。整體的思路其實很簡單,主要包括以下幾個部分:

  • 輸入中文,GPT2輸出回答文本

  • 文本經(jīng)過預訓練的機器翻譯模型,輸出對應(yīng)的日文文本

  • 日文文本輸入VITS模型,生成語音文件并播放

  • 將上述功能與RenPy結(jié)合,利用GalGame引擎實現(xiàn)真正的交互對話

下面是各部分的介紹。

中文GPT2

中文GPT2的對話模型我在上一期專欄中有詳細描述,具體細節(jié)見:

這里我們需要做的事情很簡單,先去https://github.com/yangjianxin1/GPT2-chitchat下載完整的項目代碼,以及預訓練模型文件。解壓后,將config文件夾中的config.json和下載的pytorch_model.bin移動到model文件夾中(這一步是使用Hugging Face模型的慣例):

GPT2項目文件夾
model文件夾

打開interact.py,可以在set_args函數(shù)中設(shè)置對應(yīng)的路徑(可以不用改),然后在命令行中啟動interact.py,做法見https://github.com/yangjianxin1/GPT2-chitchat。如果模型能正常對話,說明GPT2已經(jīng)配置成功了。

機器翻譯

我在網(wǎng)上搜了一下,中日翻譯的預訓練模型似乎不是很多,目前只找到Hugging Face上的幾個模型:

可以選擇下載量最高的K024/mt5-zh-ja-en-trimmed模型,我這里選擇的是下面那個fine-tuned之后的版本,進入Files,下載其中的5個文件:

新建一個translation_model文件夾,將上面的5個文件移入文件夾中,再將該文件夾置于中文GPT2的文件夾下:

這個模型的翻譯能力只能說差強人意,有些句子翻譯的不錯,但有時候又會抽風,甚至連“晚安(おやすみ)”都翻不對,大家湊合著用吧。不知道有沒有大佬知道更好的模型,或是愿意自己訓)

VITS

語音合成部分,大概效果可以參考原up的視頻:


同樣,也需要先去https://github.com/CjangCjengh/vits下載完整的項目代碼,注意要將文件夾重命名為“vits”而不是“vits-main”,路徑中不能帶“-”,否則后面的RenPy部分會報錯。

vits模型的配置有點麻煩,需要手動編譯,如果直接跑會報錯“No module named 'monotonic_align.core'”。按照官方的說法(https://github.com/jaywalnut310/vits),需要先在命令行cd到monotonic_align文件夾,然后開始編譯,也就是在命令行中輸入python setup.py build_ext --inplace:

運行完之后最后兩行會顯示有error:

這時候運行,仍然會提示“No module named 'monotonic_align.monotonic_align'”,我看到網(wǎng)上有各種做法,對我自己適用的是進入monotonic_align中的build文件夾,然后進入lib.win-amd64-cpython-39文件夾,將該文件夾下的monotonic_align文件夾直接復制到build的上一級文件夾中,相當于最后你的vits/monotonic_align文件夾應(yīng)該長下面這樣(也就是monotonic_align文件夾下還有一個同名的子文件夾):

做完這步之后,如果你直接運行,還是會報錯,提示找不到opencc\zaonhe.json。我在Google上搜索了這個問題,按照https://east.moe/archives/1342的說法,需要注釋掉cleaners.py中的shanghainese和cantonese:

然后下載預訓練模型,網(wǎng)上有不少預訓練好的VITS模型,這里我用的是原up的七人語音模型,鏈接為https://github.com/CjangCjengh/TTSModels。下載完之后需要指定配置文件,注意japanese_base.json和japanese_base2.json對應(yīng)的是兩個不同的模型,一個是7人的,一個是8人的,注意區(qū)分(柚子社7人的對應(yīng)japanese_base.json,實際上和github上的config file是一樣的):

japanese_base.json
japanese_base2.json

到這里VITS就基本配置好了,接下來引入RenPy。

RenPy

RenPy是一個可視化的小說引擎。在做這一步之前,我對RenPy一竅不通,但官方提供了教程,而且非常簡單易懂,相信大家不到半小時就能大概了解它在做什么。這是官方的快速入門教程https://renpy.cn/doc/quickstart.html#ren-py-launcher。由于是初學者,我這里也只使用了一些基本的功能,下面簡單介紹一下。

首先,下載完之后打開RenPy,是下面這個界面,點擊右下角的“啟動項目”即可進入游戲:

建議第一次用的先啟動教程,可以大概把基礎(chǔ)功能過一遍。然后在設(shè)置中把項目目錄設(shè)置在自己需要的位置(注意:不要有中文路徑),然后創(chuàng)建新項目,這樣項目目錄中就會多了一個子文件夾,里面有g(shù)ame文件夾:

此時在Launcher界面可以看到新建的項目:(如果想打開現(xiàn)有項目,需要在設(shè)置里將項目目錄改為現(xiàn)有項目的父文件夾,不是game所在的文件夾)

進入game文件夾,里面就是游戲相關(guān)的各種文件:

其中,script.rpy就是游戲的文本文件,也是我們需要編輯的,這里的rpy文件參考了https://github.com/cjyaddone/ChatWaifuL2D。

為了讓老婆動起來,我們還需要配置好Live2D文件。由于不會畫畫,也不會用Live2D,這里我直接借用了ChatWaifuL2D中的Hiyori的Demo。具體做法是進入這個項目文件夾中的ChatWaifuGameL2D/game文件夾,將Resources文件夾復制到你自己的game文件夾中(Live2D大佬可以忽略這步,直接把自己的配置文件加進去):

然后按照官方的教程,下載Live2D Cubism:https://renpy.cn/doc/live2d.html#installing-live2d。大概的效果如下:

script.rpy的代碼如下:

其中,第一句define定義了你的老婆,而后面兩行是用來配置Live2D的。這里需要把Character中的字符串換成你老婆的名字:

RenPy只能導入它自帶的python包,而光是一個torch就有幾個G,所以把所有包復制到RenPy目錄并不現(xiàn)實,因此可以利用socket庫實現(xiàn)本地通信,思路來源于下面這篇專欄:

具體而言,初始化時import socket,選擇本地通信地址127.0.0.1,代碼如下(python關(guān)鍵字會引出一段python代碼塊,$符號代表這一行也是python語句):

初始化完成后,會進入start語句塊,隨后跳轉(zhuǎn)到modelChoiceJP語句塊,其中menu代表選擇支,不同的speaker id對應(yīng)不同的角色語音,然后程序?qū)peaker id發(fā)送給真正運行模型的腳本run_gal.py(代碼后文會說)。然后跳轉(zhuǎn)到talk_keyboard語句塊,input中的字符串會在對話框中顯示(見下圖)。隨后輸入文本也發(fā)送給run_gal.py。如果輸入退出,會退回到起始界面。

隨后,跳轉(zhuǎn)到checkRes語句塊,這也是實現(xiàn)交互功能的核心。由于發(fā)送和接收有一定延遲,因此如果run_gal.py在生成輸出后直接播放語音,會導致語音播放先于RenPy的文字顯示,因此在RenPy接收到回復文本后,會向run_gal.py再發(fā)送一條允許播放的消息,此時程序才播放對應(yīng)語音,也符合實時對話的效果:

等待文本生成時,對話框會顯示......,需要時不時點一下屏幕(嘗試跳轉(zhuǎn)到下一對話),如果已經(jīng)接收到回復,就會顯示對應(yīng)的文本,同時開始播放語音:

到這里,關(guān)于RenPy的部分就大概做完了,接下來介紹真正運行模型的run_gal.py文件。

run_gal.py

run_gal.py文件定義在vits文件夾下,代碼如下:

首先,我們要導入GPT2文件夾中interact.py中的set_args和top_k_top_p_filtering函數(shù),所以需要將GPT2-chitchat文件夾添加到系統(tǒng)路徑

然后是初始化函數(shù),其中我們需要指定VITS的配置文件(configs/japanese_base.json)和預訓練模型文件(我這里是365_epochs.pth)。這里我還修改了一下gpt_args.repetition_penalty的值,具體取值取多少可以自己試一試。

然后是chat函數(shù),參數(shù)中的text代表輸入文本,返回是GPT2預測的回答文本,這一部分不需要自己改動。順便提一句,其實GPT2也可以學習前文的提示,這里的gpt_args.max_history_len參數(shù)默認是3,即模型輸出時會參考之前的3句話。當然,可以把max_history_len調(diào)大一點,提高模型提取上下文的能力,不過模型輸出一句話的時間也會相應(yīng)增加。

在主程序部分,首先需要配置端口,作為本地通信socket的服務(wù)器:

在主循環(huán)中就不斷重復接收輸入、生成回答、播放語音文件的過程。正如前面提到的,為了避免RenPy中的文本顯示與語音播放的延遲,server在接收到client發(fā)送的指令之后,才開始播放語音文件:

最后,當server接收到“退出”時會退出當前循環(huán),需要重新輸入speaker id,開啟新一輪的對話。至此,所有代碼部分就講完了,下面是操作環(huán)節(jié)。

操作環(huán)節(jié)

操作部分就比較簡單了。由于socket通信需要先啟動server(我猜的,望大佬指正),所以我們先在命令行中cd到vits所在文件夾,然后輸入python run_gal.py運行腳本文件,過一會便會顯示“socket prepared”,說明server已經(jīng)啟動了:

然后我們打開RenPy,啟動項目,可以順利進入初始界面:

(如果報錯提示“由于目標計算機積極拒絕,無法連接”,說明server沒啟動,可以重新運行一下run_gal.py)

點擊“開始游戲”,會進入角色選取菜單:

選擇完角色之后,即可進入輸入界面:

輸入文字后回車,你老婆會表示......:

此時命令行中也會顯示接收到的文本,模型輸出完成后,命令行中會顯示生成的回答文本和相應(yīng)的日文翻譯(有時需要在命令行中回車一下):

然后在你老婆所在的界面點擊一下,就會顯示回答和播放語音,命令行中也會顯示“sound playing”:

這樣一次簡單的交互就完成了,如果想重新開始就在對話欄輸入“退出”,然后回車,這樣系統(tǒng)就會跳回到開始界面,老婆的記憶也重置了

(這里順便提一下,如果使用的是VS Code編輯rpy文件,后面編輯py腳本的時候可能會提示找不到你安裝的那些包(雖然運行是沒問題,但是會有warning),這是因為RenPy貌似自帶了一個Python解釋器,可以在VS Code通過Ctrl+Shift+P重新選擇Python解釋器)

結(jié)語

寫到這里,一個簡易版的離線AI老婆就做完了。整個過程斷斷續(xù)續(xù)持續(xù)了兩個星期,最終的效果雖然粗糙,但也符合我一開始的預期。但這期專欄說到底還是各種縫合,沒什么技術(shù)含量,在這個過程中我也沒學到太多東西(我甚至懶得訓練一個VITS),最多算一個支線吧,大家看得開心就好。我自己還是偏向于做一些GalGame和AI結(jié)合的項目,下一個項目的主題我已經(jīng)想好了,是圖像相關(guān)的,感覺有一定難度,也有可能最后做不出來,看看什么時候有時間嘗試吧。


無需聯(lián)網(wǎng)/不需要ChatGPT的簡易版AI老婆教程:VITS+中文GPT2+機器翻譯+RenPy的評論 (共 條)

分享到微博請遵守國家法律
兴业县| 绥化市| 惠水县| 宝坻区| 临清市| 南汇区| 南和县| 克山县| 横山县| 河源市| 吉木萨尔县| 大荔县| 滦南县| 博白县| 白河县| 油尖旺区| 广水市| 遂平县| 汝南县| 上栗县| 治县。| 洪湖市| 金坛市| 康马县| 赤壁市| 紫金县| 毕节市| 临颍县| 博乐市| 桐柏县| 赫章县| 霍山县| 宜宾县| 阿克| 五峰| 溧水县| 沁水县| 金阳县| 独山县| 洛浦县| 昌平区|