Skip to content

Tatakinov/yomibito_minarai

Repository files navigation

# ソフトウェアについて

【名    称】詠み人見習い
【種    別】ゴースト
【制 作 者】タタキノフ
【動作確認】Windows 10 and Wine 8.0以降 / SSP 2.6.52以降
【配 布 元】https://tatakinov.github.io/
【連 絡 先】tatakinov_at_gmail.com
            https://twitter.com/tatakinov_ukgk
            https://ukadon.shillest.net/@tatakinov


## ゴーストについて

川柳のような何かを作るゴーストです。
専用バルーンを使う前提の表示なのでそちらもインストールしてください。

川柳を詠んだ後に出てくる星マークをクリックすればブクマ出来ます。
もう一度見たい場合や画面キャプチャして自慢(?)するのに活用していただければ。


## SLMによる川柳解説

別途SLMを用意することで生成した川柳に
解説のような何かを付けることができます。
https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-onnx
の
cpu_and_mobile/cpu-int4-rtn-block-32
からモデルやらコンフィグやらをダウンロードします。
30GB程度のディスクの空き領域が必要になります。
ダウンロードの仕方は各自で調べてください。
ghost/master/aiにmodelフォルダを作り、
model
    |- added_tokens.json
    |- config.json
    |- ...
のように配置します。
それからゴーストを起動すれば、川柳生成後に解説をつけるようになります。


## 必要なスペック

川柳のみ: 400MB程度の空きメモリ
川柳+解説: 3GB程度の空きメモリ

解説付きの場合は.NET 8が必要になり、さらに64bitでビルドしている関係で
古いOSでは動作しないと思われます。
また、CPUで推論を行うため、時間がかかります。
川柳ガチゃをする場合は、解説機能は切ったほうがいいでしょう。


## 注意

R-18な単語を含む川柳を生成する場合があります。
自動生成なので川柳/解説のクオリティには期待しないでください。


## ゴースト著作権について

[1.ゴーストダウンロードページに直接リンクされる]
○

[2.ゴーストのネタバレをされる]
○

[3.ゴーストに対し批判的な意見を言われる]
○
作者の髪が薄くなります。

[4.二次創作物の配布をされる(HP素材フリー配布、同人誌販売等)]
[5.原作の設定と大きくかけ離れた二次創作をされる]
[6.18禁二次創作をされる]
○
ただし二次創作物である旨を目につく場所に記載すること。

[7.追加シェル、バルーン等を配布される]
○


[8.マスターシェル、バルーン等を改変したものを配布される](7がOKの人のみ)
○

[9.トークをウェブ上に転載]
○

[10.マスターシェルを素材(掲示板のアイコンなど)として使用]
○

[11.ゴーストアーカイブへの直リンク]
○

[12.公開中ゴーストをウェブ上で再配布]
○
でもオリジナルをダウンロードしてほしくもある。

[13.配布終了したゴーストをウェブ上で再配布]
○

[14.中身を改変した上でウェブ上で再配布](12と13のどちらかがOKの人のみ)
○
ただし、改変している旨を目のつく場所に記載すること。

[15.ゴーストの同人誌収録]
[16.ゴーストの商業誌収録]
○
ご自由に。


### シェル

Negi-Mixを使用したAIシェルです。
モデルのライセンスはFair AI Public License 1.0-SDです。
https://freedevproject.org/faipl-1.0-sd/


## 使用ライブラリなど

以下のライブラリ/ソフトウェアを使用しています。
それぞれのライセンス詳細はLICENSE.txtを参照してください。

Lua                 | https://www.lua.org/
sol2                | https://github.com/ThePhD/sol2/
luautf8             | https://github.com/starwing/luautf8/
luaex               | https://github.com/LuaDist/luaex/
Luachild            | https://github.com/pocomane/luachild/
zlib                | https://www.zlib.net/
onnxruntime         | https://github.com/microsoft/onnxruntime
onnxruntime-genai   | https://github.com/microsoft/onnxruntime-genai
chiVe               | https://github.com/WorksApplications/chiVe

## 川柳で使用している語彙について

saori/word2vec/data.gzに含まれています。

mecab-ipadicに含まれる形態素の基本形と合致するchiVeの単語ベクトルを
抽出したものを使用しています。
ライセンスはCOPYING.mecab_ipadic.txtおよびLICENSE.chive.txtを
参照してください。


# おまけ

## 川柳生成の仕組み

まず品詞+文字数の情報でそれっぽく川柳を生成します。
「カッターがマグロに話す庭の糧」
品詞と文字数の情報を併記するとこう。
「カッター(名詞,4)が(助詞,1)マグロ(名詞,3)に(助詞,1)話す(動詞,3)庭(名詞,2)の(助詞,1)糧(名詞,2)」
この内、品詞と文字数の情報、それと最初の単語と助詞を残します。
「カッターが(名詞,3)に(動詞,3)(名詞,2)の(名詞,2)」
最初に抜けている(名詞,3)に対応する単語をword2vecで
「カッター」に意味の近い名詞を持ってきます。
「カッターがハサミに(動詞,3)(名詞,2)の(名詞,2)」
次の(動詞,3)に対応する単語を
「カッター+ハサミ」に意味の近い動詞を持ってきます。
「カッターがハサミに切れる(名詞,2)の(名詞,2)」
次の(名詞,2)に対応する単語を
「ハサミ+切る」に意味の近い名詞を持ってきます。
「カッターがハサミに切れる紙の(名詞,2)」
次の(名詞,2)に対応する単語を
「切る+紙」に意味の近い名詞を持ってきます。
「カッターがハサミに切れる紙の束」
となって完成です。

最初のよりは意味が通りそうなものになる一方、ランダムな単語の羅列で作られる
おもしろ川柳が出来にくくなるのは難しいところ。
どこいつみたいな単語の厳選をすれば
ランダムな単語の羅列の方が面白そうなので誰か作って。


## AIInterpreter.exeについて。

onnxのモデルを読み込んでChatGPTみたいなやりとりが出来ます。
Phi3以外のonnxモデルでも動くのかもしれませんが、動作確認はしてません。

一行目の入力を${system}、二行目の入力を${user}として、
<|system|>
${system}<|end|>
<|user|>
${user}<|end|>
<|assistant|>
とLMに入力するようになっています。
入出力はUTF-8に限定されるので注意してください。