Markov Model Natural Language Generation Test on Accord.net

73 views
Skip to first unread message

Christian LeMoussel

unread,
Nov 30, 2013, 2:28:43 AM11/30/13
to accor...@googlegroups.com
Hi Cesar,

I would like to ask which are the available ways to calculate / haverst  the occurence of words following other words (or groups of words)  that uses Markov chains to generate probabilistic text.
This generator probabilistically creates texte by looking at the previous N words (N = lookback) and sampling from the distribution of words following them. 

To do this I thought of using a Markov Model Natural Language Generation with
1) Generate map in the form word1 -> word2 -> occurences of word2 after word1
2) Convert map to the word1 -> word2 -> probability of word2 after word1


Could you, please, point me out some ideas?


Thank you in advance,


Christian.

César

unread,
Nov 30, 2013, 5:57:21 AM11/30/13
to accor...@googlegroups.com
Hi Christian!

If you are interested, perhaps you could take a look at the Generate method of the HiddenMarkovModel and HiddenMarkovModel<T> classes. What you can do, for example, is to transform your words into discrete labels using the Codification class, and then use those as observations in your hidden Markov model. After you have finished learning, you can call the Generate method to get observation sequences that most likely should have some resemblance to the sequences you fed into the models. Afterwards, you can use the same Codification object you created before to transform your integer sequences back into words.

Currently it seems there is no example on the documentation on how to use the generate method, but I am fixing this right now. For now, you can also take a look at some of the unit tests, such as the one starting at line 571 of the HiddenMarkovModelTest.cs file.

Hope it helps!

Best regards,
Cesar

Christian LeMoussel

unread,
Nov 30, 2013, 12:12:57 PM11/30/13
to accor...@googlegroups.com
Hi Cesar,

I'm beginner in this domain, it is some difficult to understand for me and  I'm French, it is not easy to explain my idea in English ;)

For example / test, here is a list of sentences  http://pastebin.com/raw.php?i=nqpsnTtW
This is observations for learning.  My goal is to develop a program/generator that uses Markov model to generate probabilistic new sentences.


BR,

Christian

César

unread,
Dec 2, 2013, 4:26:23 AM12/2/13
to accor...@googlegroups.com
Hi Christian!

I am also in France - I am still learning French, but reading it is not so difficult for me. So you can also contact me by mail or chat to explain your idea!

In this last week I have been working on adding some new features to aid in this specific task. I have also added an example in the documentation describing how it can be done. I have not generated a new release yet, but I can generate the binaries for this most current version if you would like to take a look. An example on how to do it is currently available at


More specifically, an example is available starting at line 605, in the method GenerateTest2. Please let me know if this is what you need. I will prepare some new binaries soon!

Regards,
Cesar

Christian LeMoussel

unread,
Dec 2, 2013, 5:43:34 AM12/2/13
to accor...@googlegroups.com
Bonjour César,

Ou te situe tu en France ?

Dans un premier temps si tu n'y voit pas d’inconvénient je te propose d'expliquer / d'échanger sur mon idée sur ce fil de discussion. Ainsi si d'autres personnes sont intéressés sur les modèles/chaines de Markov avec la librairie Accord.NET, ils auront de l’information sur le sujet.

Je vais étudier ton exemple de code (méthode GenerateTest2). Je t'indiquerais d’ici la fin de cette semaine, si cet exemple exprime mon idée.
Afin de procéder à des tests, je suis intéressé par une nouvelle version des binaires intégrant ces nouvelles fonctionnalités.


Rem : J'utilise NuGet pour l’installation des composants / librairies sous VS 2012. 
Si tu procéde à des mises à jour, merci de mettre à disposition la nouvelle version sous Nuget afin que que je réalise les "updates" nécessaires dans mes projets Visual Studio C#.


Bonne journée.

Christian.

Christian LeMoussel

unread,
Dec 3, 2013, 6:58:46 AM12/3/13
to accor...@googlegroups.com
César,

En première analyse l'exemple GenerateTest2 correspond à mon idée.
Cependant il faut que je mène des tests plus approfondis. Mais pour cela, je vais avoir besoin de de la nouvelle version.
Qu'en pense tu la mettre à disposition ?

Cordialement.

Christian.

César

unread,
Dec 3, 2013, 2:07:33 PM12/3/13
to accor...@googlegroups.com
Bonjour Christian!

Premièrement, je suis désolé pour mon Français. J'ai commencé à l'apprendre depuis que j'ai déménagé ici. Aujourd'hui, je m'habite à Grenoble - et toi?

Je ne peux pas dire avec certitude quand la nouvelle version sera disponible, mais je peux fournir un package avec les binaires mis à jour. Vous pouvez essayer et voir si quelque chose ne marche pas. Si vous voyez quelque chose ne marche pas correctement, je peux mettre à jour avant la prochaine version. Je suis les transférant maintenant.

Cordialement,
Cesar

Christian LeMoussel

unread,
Dec 3, 2013, 3:28:48 PM12/3/13
to accor...@googlegroups.com
Bonsoir César, 

J'habite beaucoup plus haut dans le Nord ! Plus exactement à Evreux en Normandie.
Oui tu peux me fournir un package avec les binaires mis à jour afin que j'essaye. 

Bonne soirée.

Christian.

César

unread,
Dec 4, 2013, 4:31:15 AM12/4/13
to accor...@googlegroups.com
Et voilà: https://dl.dropboxusercontent.com/u/32601472/accord/releases/Accord.NET%20Framework-2.11.2-(libs%20only).rar

Si vous avez problèmes, dit-moi s'il vous plaît.

J'espere que ça aide!
Cesar


Christian LeMoussel

unread,
Dec 6, 2013, 9:36:06 AM12/6/13
to accor...@googlegroups.com
César,

Je n'ai rencontré aucune anomalie dans mon environnement VS avec l'utilisation de cette nouvelle version des librairies Accord.Net et ton exemple  GenerateTest2()

Concernant ton exemple, ne maitrisant pas les chaines de Markov, j'aurais besoin de quelques explications.

// To create the models, we will specify a forward topology,
// as the sequences have definite start and ending points.
var topology = new Forward(states: 4);

Que signifie "forward topology" ?
Forward(states: 4) indique t'il que pour ce modèle de Markov, le calcul de probabilité des mots (séquences) s'effectue sur 4 mots au maximum consécutifs ?

// Now, we can ask the model to generate new samples
// from the word distributions it has just learned:
int[] sample = hmm.Generate(3);

// And the result will be: "those", "are", "words".
string[] result = codebook.Translate("Words", sample);

hmm.Generate(3), Génération de 3 mots. Est ce exact ?
Le résultat est toujours le même avec les mots
"those", "are" et "words.
Dans le cas d'un échantillon beaucoup plus important de mots, est il possible d'obtenir des résultats différents à chaque tirage ?

Cordialement,

Christian.






Message has been deleted

César

unread,
Dec 30, 2013, 2:43:02 PM12/30/13
to accor...@googlegroups.com
Bonjour Christian!

Il a été un peu pressé en ce dernier mois. Maintenant que je suis en vacances, je pourrais trouver le temps de répondre correctement à votre question, désolé pour le délai.

Les différences entre les topologies peuvent être trouvés dans cet article: http://www.codeproject.com/Articles/541428/Sequence-Classifiers-in-Csharp-Part-I-Hidden-Marko#topo dans la section "State-transition topologies". 

Fondamentalement, une topologie Forward doit être utilisé quand vous avez points de début et de fin précises dans vos séquences. Une exemple sont les mots: un mot a un début (la première lettre), un milieu et une fin (la lettre finale). Si vous ne pouvez pas identifier un point point initial et de fin, puis utilisez une topologie ergodique. Un exemple est la météo: Le passage du temps a toujours existé et continuera d'exister, alors qu'il n'a pas un début bien défini.

En ce qui concerne votre dernière question, oui, il est. Il faudrait un peu de tests et de réglages pour obtenir une bonne compréhension du problème que vous essayez de résoudre.

J'espère que ça aide, et bonne année!
César
Reply all
Reply to author
Forward
0 new messages