投稿

ラベル(思い)が付いた投稿を表示しています

RDF, OWLの面白さを知る本(Semantic Web for the Working Ontologist)

前の記事『 Pythonでオントロジー指向プログラミング(Ontologies with Python: Programming OWL 2.0 Ontologies with Python and Owlready2) 』では、Python と Owlready 2 を使った、OWL を扱うプログラミング本を紹介しました。 今回は、OWL などを使ったプログラミングの前に、そもそも RDF や OWL のモデルをどのように構築すべきか、という設計に関するヒントが詰まった本『実践セマンティックWeb(Semantic Web for the Working Ontologist)』の紹介です。 Semantic Web for the Working Ontologist: Effective Modeling for Linked Data, RDFS, and OWL (ACM Books) (English Edition) (Amazonで書籍情報を表示) OWL や RDF などのセマンティックWeb系の技術は、業務アプリの設計とは無縁のように思われそうですが、設計あるいはモデリングの観点から見ると、本質的なところは同じような気がしています。 特に、OWL や RDF は、プログラミング言語のような処理を記述するものではなく、知識(データ)を記述するものなので、リレーショナルデータベースを中心としたデータ設計あるいはモデリングを考えるときなど、ヒントも多くて、とても刺激的な内容だと思います。 (推論を含めると、データの表現だけでなく、処理も含んでいると思いますけど。) <本の内容> 『Semantic Web for the Working Ontologist』は、版を重ねて最新版は第3版です。 初版から10年以上たっても本の改訂が続いているということだけでも凄さが分かります。 ここでは、初版から目次(内容)をみながら、セマンティックWeb技術の着実な(急激ではない?)進化を見てみます。 実践セマンティックWeb―RDF/RDFS/OWLによるオントロジー設計ガイド Dean Allemang (原著), James Hendler (原著),萩野 達也 (監修), セマンティックWeb委員会 (翻訳) 初版(日本語版:発...

Pythonでオントロジー指向プログラミング(Ontologies with Python: Programming OWL 2.0 Ontologies with Python and Owlready2)

Ontologies with Python: Programming OWL 2.0 Ontologies with Python and Owlready2 (English Edition) Lamy Jean-Baptiste (著) Ontologies with Python: Programming OWL 2.0 Ontologies with Python and Owlready2 (Amazonで書籍情報を表示) 最近楽しみながら読んだ本のご紹介です。 オントロジーやOWL(Web Ontology Language)、セマンティックウェブといった単語は、知っている人は詳しく知っていると思いますが、ご存知ない方も多い気がします。 これらについては長くなるので割愛しますが、ネットでこれらの用語を検索して調べてみると、学術分野っぽい説明などが多くて、縁遠い印象を受けるかもしれません。 しかしながら、データの表現力を高めて応用するための技術だと考えれば、一般的なアプリ制作においても、(はまれば)とても身近で役立つ価値の高い技術だと思っています。 仮にオントロジーだとか知識表現に全く興味が無くても、プログラミングの引き出しを増やすというだけでも意味があると思います。 この本は、そんなオントロジーやOWLの扱い方を、Python のライブラリ Owlready2 を用いてハンズオンっぽく身に付けることができます。 残念ながら英語の本ですが(現在日本語訳はないと思いますが)、私でも理解できる程度の平易な文章で書かれており、それもあってか Google 翻訳を利用すれば、かなり良い日本語に翻訳してくれますので(笑)、英語の壁は高くありません。 (実際には、本文が理解できなくても、コード例を見れば理解できることが多いと思います。) <本の内容> 以下は目次とざっくりとした内容です。 Chapter 1: Introduction ontology-oriented programming(オントロジー指向プログラミング)への動機付けなどの紹介です。 Chapter 2: The Python language: Adapt a snake! Python 言語のざっくりとした説明です。 Chapter...

PC上の自分用Ubuntu日本語デスクトップ開発環境サービスを作る(Vagrant+VirtualBox)

イメージ
本記事では、Windows10 PC上のVirtualBoxとVagrantを利用し、開発環境の構築作業と利用を明確に分離することで、開発に必要な時だけ仮想マシンを利用するようなUbuntu日本語デスクトップ開発環境サービスを考えます。 【目次】 [1]はじめに [2]開発環境のサービス化へ (1)「モノ」から「コト」へ? (2)必要な時だけ使える開発環境 [3]ローカルPC上のサービス実現技術(Vagrant+VirtualBox) (1)VagrantのBOXを利用して環境構築する利点 (2)Vagrantを利用する欠点? [4]自分用開発環境サービス (1)サービスを利用する側(開発作業)のシナリオ (2)サービスを提供する側(BOX作成)の考え方 (3)サービスを提供する側(BOX作成)の作業手順 (4)要点のまとめ [5]Ubuntu日本語デスクトップ開発環境サービス (1)概要 (2)UbuntuのベースBOXから日本語デスクトップ環境のBOXを作成する (3)日本語デスクトップ環境のBOXから開発ツールを追加したBOXを作成する (4)BOXから開発用仮想マシンを作成して開発作業を行う [1]はじめに 開発系の仕事をこなしていくと、現在開発中のものからメンテナンス期のものまで、いろいろな開発環境が必要になってきます。それぞれの開発環境は、OSレベルの違いから、開発言語、ミドルウェア、そしてそれらのバージョンも異なることもありますし、開発中の製品でも複数の製品バージョンが存在したりします。 ちなみに、ここでいう開発環境とは、個別のコード管理やビルド、テストツールというより、開発者がプログラムの作成やデバッグ、テスト実行を行ったり、様々なツールを利用できるローカルPC上のデスクトップ環境のことです。 今の時代(あるいはプロジェクト)が求める要求に応じた技術を利用するためには、今の開発環境が必要になります。一歩先の技術を知るためには、今とは異なる環境が必要になるかもしれません。さらに、過去のプログラムのメンテナンスや移行を行うために、過去の開発環境を再現したくなります。 開発環境は時代や要求に応じて変わってくるものと思いますので、結果として多様な開発環境を管理する方法が欲しくなります。 皆さんは、このような複数の開発環境をどのように管理されているの...

「エージェント」と「環境」を意識して業務システムを少し賢くしたい

イメージ
本記事では、エージェントの考え方にある「環境」を意識して、便利というより、賢い業務システムを作るための考え方みたいなことを書いてみました。 【目次】 [1]はじめに [2]「少し賢い」業務システムとは? [3]環境と相互作用するエージェント [4]業務システムから見たAI技術 [5]AI技術導入に向けて (1)スマートデバイス、IoTデバイス (2)インターネット、クラウド、オープンソース (3)AIサービスの利用 (4)Society 5.0、DX、IoTプラットフォーム (5)AIアシスタント、RPA (6)オントロジー、推論など [6]最後に [1]はじめに 私にはAI技術の深い専門的知識はありません。しかし、長年業務システムの設計や開発に携わってきたこともあり、AI技術そのものよりも、AI技術を応用して業務システムを少し賢くする、という観点から、AI技術に注目しています。大企業の業務システムや大規模パッケージは別として、中小規模の業務システムやパッケージに携わっている方は、同じような興味を持たれているかもしれません。 そこで、今回は業務システムのデータ入力をとっかかりとして、「便利」というより「少し賢い」ことを目指した業務システムについて考えていることを書いてみます。結論は当たり前の話ですが、そう考えた過程に参考になる部分があれば幸いです。 [2]「少し賢い」業務システムとは? 業務システムは、データを入力して、そのデータを処理し、処理結果を出力するというサイクルを持っています。ダサい図ですが、こんなイメージです。 ここでは、元となる入力情報が電子データではなく、紙や画像の情報を元に、人間が入力画面を通じて、その情報を手入力するシステムを考えます。例えば、紙に書かれている顧客情報を業務システムの顧客入力画面から入力するといったものです。 一般に、業務システムでは、入力するデータの量(入力量が多いなど)と質(正しくデータを入力するなど)等の観点から、ユーザにとってデータの手動入力は負担が大きい作業といえます。この負担を軽減するため、業務システムでは、入力画面に何らかの入力支援機能を装備することが多いと思います。例えば、郵便番号を入力すると住所欄に市区町村レベルまで自動入力される機能や、過去に入力したデータを覚えている機能、似たような登録パタ...

50代半ばの技術者がブログを始める理由

私は50代半ばのソフトウェアエンジニアです。正直いって、文章で何かを伝えたり表現することは苦手です。学生時代の国語の成績も最悪でした。そんな私が、なぜブログを始める気になったのでしょうか。 私がブログを始めようと思いたった後に、ネットを検索してブログを書く魅力、メリット、デメリットなどの情報を見ました。しかし、これらの情報を見てブログを始めようと思ったわけではありません。 そこで、私がこのブログを書くまでの、過去から現在までの変化、そして未来に向かって、現在考えていること書いてみます。 ■過去~現在:仕事の進め方やスキルアップの方法が変わった 私が社会人(技術者)としてスタートした時代は、まだインターネットが利用できませんでした。当時は、(高価な?)書籍を読んだり、自分で試行錯誤してスキルを磨くことが基本だったと思います。また、仕事の範囲や必要とされる知識やスキルも、今に比べると限定的で、スキルは共有というより、自分に閉じたもの(自分のメシのネタ)という感覚が強かったように思います。 それがインターネットの普及に伴い、様々な企業や団体、学術関係、個人の方々等が発信する広く新鮮な情報、オープンソース、(書籍では得られない)細かいノウハウなどが簡単かつタイムリーに得られるようになり、情報共有文化の恩恵を享受しながら仕事をするようになりました。さらに昔に比べて仕事の範囲が広くなり、それに応じて広い知識や高いスキルが求められ、今や一人で全てを理解し、実践することは不可能と思える時代になりました。ある程度の専門性を維持しつつ広い知識をもって仕事をするためには、開かれた世界の中に身を置いて、情報共有型(情報をもらうだけでなく、自分も発信する双方向型)になるべきと考えるようになりました。ただ、そう思っても、ブログを書くという発想にはなりませんでした。 ■未来に向けて:生涯現役(長く技術に携わること)を考えた 人生100年を考えると、50歳を過ぎたというのはまだ人生の半分を過ぎただけであり、まだ残りの人生が長く続きます。そこで、死ぬまで、とは言わないまでも、長く技術の進化を楽しんでいたいと思うようになりました。 今までは、自分の技術(スキル)が会社の仕事(役割)と強くリンクしていましたが、長く技術を楽しむためには、技術そのものに対して、より興味を持続できるような、今までとは少し違っ...