セマンティックウェブ・ダイアリー

小出誠二の個人的な業務日誌

皆様,あけましておめでとうございます.今年はいよいよ後期高齢者の仲間入りを果たすことになりますが,脳内出血後遺症に悩みながらも,幸いなことに,リハビリ,ウオーキング,Zoomによる講習会主催と昨年の延長上の活動を引き続きできていますが,同時にもう無理はできないなというのも日に日に強く感じております.昨年の新春ごあいさつでは以下のようなことを書かせていただきました.

「そんな環境のなかで,何事も成否は運や外部環境ではなく,自分たちの努力や実力が益々決定的な要因になってきています.そう思って,慌てず騒がず,まずは実力の蓄積をしようと思っているわけです.」

そんな中であらためて振り返って見てみますと,「Common Lisp と人工知能プログラミング」Zoom講習会もシーズン2がそろそろ終わりに近いなかで,論理の記述部分が足りないとか不十分だというのがあらわになり,これを何とかしないといけないということと,講義の中で「自然言語はやらないんですか」という受講者の声がきっかけとなって,また,いただいているお仕事の中で自然言語表現から論理表現への変換に成果が出始めたという自覚もあって,「Common Lispと自然言語処理(理解)」という電子本を作りますと講義中に大見得を切ったところ,講義の生徒さんのからもお三方の協力者があらわれるということで,今年からはすこしずつ従来の枠をはみ出すというか,広げるような作業をしようと思っているところです.

もちろんオントロジーというのは語彙ではないというのはそのとおりなのですが,なんにせよオントロジー構築をゼロから始めるというのは難しい.その最初の入り口としてあるドメインの語彙整理から始めるというのは,当然あってよい話で,そのためにも自然言語処理技術というのは必須の基礎技術になるわけです.目指すところはドメインオントロジー構築ですが,そのためのNLPということですから,これは当然「説明可能なAI」にもつながる話です.

それにしても,自然言語処理と論理が以前よりも親しい存在になってきたというのはうれしいことです.オントロジー+論理+自然言語はトリニティーですね.

それでは皆様,今年もよろしくお願い申し上げます.

今までもこのブログでチョビチョビと日本語の問題を取り上げてきたけど(サロゲート問題とかね),いろいろと悩ましいと書いてきた気がする.この辺で一応の決着を(個人的には)つけておこうと思ったのがこのブログ執筆の動機です.というのも.セマンティックウェブ(というか正確にはIRI)や気になっている Common Logic でもその文字コードはUNICODEとなっているし,現在の Common Lisp 処理系も大部分は内部文字コード実装はUNICODEとなっていて,外部環境はほとんど整合的にととのってきているので,一部に表示のバグの問題や,UNICODE正規化の問題が残っているにせよ,そういうマイナーな問題はいずれ時代が解決してくれると信じて,日本語で語彙やオントロジーを開発して Common Lisp で Common Logic やセマンティックウェブ処理系をこれから開発するにあたってその基本的方針を決めておきたいおきたいと思った次第です.

以下のような原則を設けます.

  1. 文字コードはすべてUNICODEとする
  2. UNICODEはすべて正規化形式C(NFC)とする
  3. サロゲートペアは扱わない
  4. IVDも扱わない

原則1によって,IPADICはオリジナルのEUCではなくUTF-8に変換しておくということになります.実は読み込んだり.書き出したりするときにはリーダーの外部formatを自在に指定できるのだけれど,一応UNIODEに限定しておけば,ここで処理系の違いで悩むことはないだろうと思うわけです.もし同一のUTF-8あるいはUTF16ファイルを読み込んで結果が違えば,それは明らかに処理系で正すべきバグでしょうね.

原則2によって,文字比較は単純に文字コード比較になります.つまり異なる文字コードが同じ文字を表すということがない.そもそもRDFでは明確にUNICODEにはNFCを使うと書いてある.特に日本語ファイル名の扱いには注意が必要です.Windowsではファイルの一行目の文字列からファイル名をつくりだしても問題ありませんが,Macではファイル名はNFCではなく,NFDになるので文字列マッチができません.これは何としてもAppleには早く治してほしいところです.

原則3によって,サロゲートペアに所属する文字を扱うことはできません.たとえば𠮷は使えないのでどうしても使いたいときには吉を使うことになります.同様に𠀋を使いたいときにはそのかわりに丈を使うことになります.ちなみに,セマンティックウェブとしては本当はサロゲートペアは容認できるのだけれど,サロゲートペアを受け付けない,加えて私が主に利用しているAllegro Common Lispでは,サロゲートペアは使えません.ただし,UNICODE中にあればサロゲートペアでなければ異体字であっても使えます.たとえば森鴎外でも森鷗外でも使えます.逆にこの両者を区別しないでマッチさせようとすると,そのためのルーチンが必要になります.同様に高田と眦弔Lispで区別して使えますが,両者を区別しないで使おうとすると,そのためのルーチンが必要です.

逆に字形としては異なっていても同一のUNICODEとなるものもあります.代表的なものでは辻(2点つじ)と(1点つじ).これを区別しようとするとUNICODEコードに加えて,字形(グリフ)コードを追加しなければならなくなる.グリフを必要とする漢字は人名に多いのですが,Ideographic Variation Database (IVD)を導入することで識別可能にはなります.私が主戦場としたい機械工学技術関係の分野では,サロゲートペアの必要性は皆無とはいえないが無視できるていどであろう.というわけで原則4にあるようにこれは無視します.いいかえれば,(2点つじ)と(1点つじ)は区別しない.これは葛飾北斎の葛も同様です.住基ネットや戸籍管理アプリではIVDは必須ですので,日本語人名関係のLODでは悩みは深いですね.

 世の中に意外とApache Jena Fusekiをオントロジーサーバーとして,サービスする記事がないことに気が付いて,それならこんな記事でも公開する意味があるかと思い,書いてみます.
 まずは基本的なことですが,Apache JenaとApach Jena Fusekiは別物です.ですから,学会などで「Jenaをオントロジーサーバーにして」などとは,決して言わないように.FusikiはJavaの走るところならどこでも走ります.極端なことを言うと,Rapsberry Pi B+でも組み込みのJavaでOKです.一般のLinuxではまずはJavaをインストールしてください.
 ubuntuなら

$ sudo apt install default-jre
で大丈夫です.

 次にApache Jena Fuseki(バイナリー)をhttps://jena.apache.org/download/#apache-jena-fusekiか,http://ftp.riken.jp/net/apache/jena/binaries/からダウンロードします.

この記事を書いている時点で,最新版はapache-jena-fuseki-3.17.0.tar.gzですね.これ1年前と変わっていない気がする.

$ curl -O https://downloads.apache.org/jena/binaries/apache-jena-fuseki-3.17.0.tar.gz

無事ダウンロードできたらそれを解凍し,/home/<ユーザ>の下にフォルダごと移動し,長い名前を短くfusekiに変えておく.

mv apache-jena-fuseki-3.17.0 fuseki

 fusekiフォルダにあるfuseki-serverを起動すれば,fusekiサーバーが立ち上がる.

$ fuseki/fuseki-server
[2021-02-16 09:54:02] Server     INFO  Apache Jena Fuseki 3.17.0
[2021-02-16 09:54:02] Config     INFO  FUSEKI_HOME=/home/seiji/fuseki
[2021-02-16 09:54:02] Config     INFO  FUSEKI_BASE=/home/seiji/run
[2021-02-16 09:54:02] Config     INFO  Shiro file: file:///home/seiji/run/shiro.ini
[2021-02-16 09:54:03] Server     INFO  System
[2021-02-16 09:54:03] Server     INFO    Memory: 4.0 GiB
[2021-02-16 09:54:03] Server     INFO    Java:   11.0.10
[2021-02-16 09:54:03] Server     INFO    OS:     Linux 5.4.0-65-generic amd64
[2021-02-16 09:54:03] Server     INFO    PID:    6334
[2021-02-16 09:54:03] Server     INFO  Started 2021/02/16 09:54:03 JST on port 3030

サーバーのポート3030にウェブブラウザでアクセスすれば見えるはずだ.

これがいわゆるRDFストアと呼ばれるもので,これに自分の好みのRDFデータをアップロードしておけばそれを全世界に公開することもできる.

このページのトップヘ