Wednesday, 30 December 2009
Swedish MedSLT, continued
Friday, 25 December 2009
Swedish MedSLT, continued
Tuesday, 22 December 2009
Swedish MedSLT
Saturday, 19 December 2009
A Scandinavian/English grammar, continued
Friday, 18 December 2009
A Scandinavian/English grammar, continued
- Negation. This is just an adverb in Scandinavian. The slightly non-trivial thing is that the position of this adverb (also some others) is different, depending on whether it's a main or a subordinate clause.
- Lexically reflexive pronouns. As in Romance, some Scandinavian verbs subcategorize for lexically reflexive pronouns, which have no semantic value.
- Lexical passive. Scandinavian verbs have a lexical passive form. I propose to do this in the morphotax.
- Definiteness. I don't yet have all the definiteness constraints. In particular, a definite singular NP has an implicit definite article, but a premodifying adjective requires an explicit definite article.
Wednesday, 16 December 2009
Swedish CALL-SLT
Tuesday, 15 December 2009
A Scandinavian/English grammar, continued
Monday, 14 December 2009
A Scandinavian/English grammar
>> skulle jag kunna få en pizza
(Parsing with left-corner parser)
Analysis time: 0.34 seconds
3 possibilities:
----------------------------------------------------------------
Possibility 1
Return value: [(null=[action,få]), (object=[food,pizza]), (null=[modal,kan]),
(null=[modal,skulle]), (agent=[pronoun,jag]), (null=[utterance_type,ynq]),
(null=[voice,active])]
Global value: []
Syn features: []
Parse tree:
.MAIN [GENERAL_SCA:541-546]
top [GENERAL_SCA:552-558]
/ utterance_intro null [GENERAL_SCA:566-568]
| utterance [GENERAL_SCA:615-620]
| s [GENERAL_SCA:713-718]
| s [GENERAL_SCA:817-826]
| vp [GENERAL_SCA:1124-1137]
| / vbar [GENERAL_SCA:876-898]
| | / v lex(skulle) [GEN_SWE_LEX:51-51]
| | | np [GENERAL_SCA:1952-1960]
| | \ pronoun lex(jag) [GEN_SWE_LEX:200-200]
| | vp [GENERAL_SCA:1124-1137]
| | / vbar [GENERAL_SCA:853-875]
| | | v lex(kunna) [GEN_SWE_LEX:61-62]
| | | vp [GENERAL_SCA:1317-1337]
| | | / vp [GENERAL_SCA:1042-1051]
| | | | / vbar [GENERAL_SCA:853-875]
| | | | | v lex(få) [CALLSLT_LEX:33-33]
| | | | | np [GENERAL_SCA:2073-2091]
| | | | | / np [GENERAL_SCA:1907-1917]
| | | | | | / d lex(en) [GEN_SWE_LEX:277-278]
| | | | | | | nbar [GENERAL_SCA:2118-2130]
| | | | | | \ n lex(pizza) [CALLSLT_LEX:179-181]
| | | | \ \ post_mods null [GENERAL_SCA:1451-1457]
| \ \ \ post_mods null [GENERAL_SCA:1451-1457]
\ utterance_coda null [GENERAL_SCA:597-599]
------------------------------- FILES -------------------------------
CALLSLT_LEX: d:/cygwin/home/speech/call-slt/swe/regulus/callslt_lex.regulus
GENERAL_SCA: d:/cygwin/home/speech/regulus/grammar/scandinavian/general_sca.regulus
GEN_SWE_LEX: d:/cygwin/home/speech/regulus/grammar/scandinavian/swedish/gen_swe_lex.regulus
Here are some of the issues I've encountered so far:
- Agreement is different in English and Swedish, so the range of possible values for the 'agr' feature has to be language-dependent. In English, agreement is by person and number. In Swedish, it's primarily by number and gender ("common" or "neuter"). However, you also need person, since reflexive pronouns agree with the subject in person.
- All verbs invert in Swedish, and there is no auxiliary "do".
- The range of verb inflections is different in the two languages. English verbs have five forms: base, third person singular present, imperfect, past participle, present participle. So, for example, go, goes, went, gone, going. Modern Swedish doesn't inflect by person or number in the present tense, but on the other hand distinguishes the imperative from the infinitive, distinguishes the "supine" (the form used for the perfect tense) from the past participle, and inflects the past participle by number and gender. So, for example, bryta (break) has the forms bryt (imperative), bryta (infinitive), bryter (present), bröt (imperfect), brutit (supine), brytande (present participle), bruten (past participle singular common), brutet (past participle singular neuter), brutna (past participle plural).
- Swedish nouns inflect for definiteness. So for example bord is "table", but bordet is "the table". Adjectives also inflect for definiteness, thus ett stort bord ("a big table") but det stora bordet ("the big table").
- Swedish possessives inflect for gender and number. So min bil ("my car", common/singular), mitt hus ("my house", neuter/singular), mina barn ("my children", plural).
- Swedish partitives are slightly different. In English, "a bottle of beer"; in Swedish en flaska öl (nothing corresponding to the "of").
- Swedish date and time grammar is slightly different. In English, "december fourteenth"; in Swedish, fjortonde december. In English, "nine thirty"; in Swedish, nio och trettio.
- Swedish negation is basically an adverb, e.g. jag beställde inte någon pizza = I ordered not any pizza. The negation adverb's position is after the verb in main clauses, before in subordinate clauses.
Wednesday, 23 September 2009
New treatment of Japanese verbs
Yukie wrote down a table of inflections, and we discussed ways of splitting up inflected verbs into stems and affixes. Based on our discussion, I've implemented a first version of a new treatment, where you now only need to specify a single root form of the verb, and everything else is done by morphotax rules, where the affixes are treated by Nuance as separate words. I've tested by converting the Japanese Calendar lexicon to the new form, and compiling into a recognizer. Coverage is what it was, and recognition is anecdotally fine with my voice. I will dig out some Japanese Calendar data soon and run proper tests.
If anyone wants to look at the details, the morphotax rules are in $REGULUS/Grammar/Japanese/japanese_verb_morphology.regulus. The new version of the Japanese Calendar lexicon is at $REGULUS/Examples/Calendar/Regulus/japanese_calendar_lex_new.regulus.
Here's an example of a parse:
$ nanji ni owa ri mashita ka(Parsing with left-corner parser)
Analysis time: 0.09 seconds
Return value: [[question,form(past,[[owaru],[ni,term(null,nanji,[])]])]]
Global value: []
Syn features: []
Parse tree:
.MAIN [JAPANESE_CORE_RULES:112-116]
top [JAPANESE_CORE_RULES:117-119]
utterance [JAPANESE_CORE_RULES:120-123]
/ main_clause [JAPANESE_CORE_RULES:147-151]
| s [JAPANESE_CORE_RULES:155-162]
| / comps [JAPANESE_CORE_RULES:190-195]
| | / pp [JAPANESE_CORE_RULES:414-423]
| | | / np [JAPANESE_CORE_RULES:267-273]
| | | | n lex(nanji) [JAPANESE_CALENDAR_LEX_NEW:84-84]
| | | \ p lex(ni) [JAPANESE_CALENDAR_LEX_NEW:274-284]
| | \ comps null [JAPANESE_CORE_RULES:163-166]
| | vbar [JAPANESE_CORE_RULES:249-253]
| | v [JAPANESE_VERB_MORPHOLOGY:13-26]
| | / v_stem [JAPANESE_VERB_MORPHOLOGY:27-38]
| | | / v_stem lex(owa) [JAPANESE_CALENDAR_LEX_NEW:227-237]
| | | \ stem_affix lex(ri) [JAPANESE_VERB_MORPHOLOGY:138-138]
| \ \ affix lex(mashita) [JAPANESE_VERB_MORPHOLOGY:80-83]
\ lex(ka)
------------------------------- FILES -------------------------------
JAPANESE_CALENDAR_LEX_NEW:
d:/cygwin/home/speech/regulus/examples/calendar/regulus/japanese_calendar_lex_new.regulus
JAPANESE_CORE_RULES:
d:/cygwin/home/speech/regulus/grammar/japanese/japanese_core_rules.regulus
JAPANESE_VERB_MORPHOLOGY:
d:/cygwin/home/speech/regulus/grammar/japanese/japanese_verb_morphology.regulus
Thursday, 17 September 2009
"Abstract actions" and the dialogue server
The first point Maria made was that she would prefer to use XML-formatted messages. Java finds it easy to manipulate XML; parsing Prolog messages, on the other hand, is a complete pain. So I added switches that allow the client to put the server into a mode where all messages are XML strings inside a minimal Prolog wrapper.
Yesterday, Maria made another very sensible request. In the first version of the application, the Prolog "output manager" module received abstract actions, and transformed them into concrete actions. Typically, concrete actions would involve printing strings. So, for example, suppose that the system has just given you the prompt
POLITE REQUEST TABLE outside
and you have correctly replied
i would like a table outside please
The abstract action produced is
display_matching_info('i would like a table outside please', correct, [2,1,2])
which means that the recognized words were 'i would like a table outside please'; they correctly matched the prompt; and the score is now 2 correct, 1 incorrect, with a positive streak of 2. This is converted by the output manager into the concrete action
print('I heard: "i would like a table outside please"
Correct!
Score: 2 right, 1 wrong (66.7%) Streak: 2')
This works fine for a text-based command-line interface; but, as Maria pointed out, the output processing isn't necessarily appropriate when you have a Java Swing GUI, in which case you probably would prefer to format it yourself. For instance, you might want to print the recognized words in one pane, render the "correct" as a green tick-mark in another one, and present the score graphically as three columns of different heights.
In general, the abstract action is going to be more useful to you than the concrete one. So I've just added a little more functionality to the dialogue server to handle that too. Here's a summary of the new messages, and what they do; they are also documented in the file itself, $REGULUS/Prolog/dialogue_server.pl.
- action(xml_messages). Format future messages in both directions in XML form. Each message will be of the form
xml_message(XMLString).
where XMLString is an XML encoding of the corresponding Prolog message produced using the predicate prolog_xml/2 in $REGULUS/PrologLib/prolog_xml.pl. The XML can be converted back into Prolog if necessary using the same predicate. - action(prolog_messages). Format future messages in both directions in Prolog form (default).
- action(abstract_actions). Pass abstract actions to the client, so that the client can do its own output management.
- action(concrete_actions). Pass concrete actions to the client (default).
Tuesday, 15 September 2009
Warning: don't use SICStus 4.0.2
So avoid this release! 4.0.4 is fine.
Sunday, 13 September 2009
Dialogue server now accepts XML format messages
Details (this is documented in $REGULUS/Prolog/dialogue_server.pl):
- Initially, the server is in Prolog mode.
- To put the server into XML mode, send the message
xml_messages.
- Subsequent messages are of the form
xml_message(XMLMessage).
where XMLMessageis an XML encoding of the corresponding Prolog message produced using the predicate prolog_xml/2 in $REGULUS/PrologLib/prolog_xml.pl.
The XML can be converted back into Prolog if necessary using the same predicate.
I have tested by converting the CALL-SLT Prolog client to use XML-flavor messages, and it all works fine.
The routines in $REGULUS/PrologLib/prolog_xml.pl should in general be useful for translating Prolog into XML form in a reversible way. Look at the file for documentation and an example.
Monday, 7 September 2009
CALL-SLT and Japanese
Yukie and I should talk about how to proceed here. The first step will be to add material to the Japanese corpus.
Saturday, 5 September 2009
Using recorded wavfiles as help information in CALL-SLT (part 2)
I tested it on English, and we now have a complete set of wavfiles for that language. As soon as we have a bit more coverage for French and Japanese, I'll add similar scripts for them too.
Friday, 4 September 2009
Using recorded wavfiles as help information in CALL-SLT
The idea is simple, but there were some messy technical problems... a bad interaction between Nuance and SICStus concerning relative pathnames, and the question of what happens if two different users try to check in new wavfiles simultaneously. I think I have decent solutions, though. For more details, look at the online documentation which I have just added. This also tells you how to download and run the system.
Sunday, 23 August 2009
CALL-SLT and Japanese
hitori no teeburu wa arimasu ka
which is rendered in the Interlingua as
POLITE REQUEST TABLE 1 PERSON
Though it is nice that this goes all the way through: I can get the Interlingua as a prompt, speak the sentence, and be informed that I got it right. Not surprisingly, since the grammar doesn't cover anything else, it's very reliable when you say the one thing it knows!
Yukie and I need to get together and add more content. The first step will be for Yukie to flesh out the corpus, which currently only has a dozen or so examples.
Saturday, 22 August 2009
CALL-SLT and French
Next, Japanese...
Progress on CALL-SLT
- "Next prompt". The server generates a new prompt, using its current strategy, and returns it.
- "Recognize and match". The server performs recognition, translates it to Interlingua, matches against the current prompt, and returns a string explaining what happened.
- "Help". The server returns the current prompt, plus a text example illustrating one possible way to realize the prompt.
Thursday, 20 August 2009
Progress on CALL-SLT
Of course, what I really want to do is try it in another language... I already know how to order in English restaurants! I'll start sorting out the config files and scripts for Japanese. My restaurant Japanese is shaky, and I'm very curious to see if I can use CALL-SLT to improve it.
Wednesday, 19 August 2009
Progress on CALL-SLT
At any rate, you can now run the speech-input English system from the Regulus command-line, setting it so that spoken inputs are parsed and translated into Interlingua. I don't think it's that much extra work to add code so that we have a complete first version of the system. There will initially be two commands. You can either ask for a new Interlingua prompt, or ask to speak. If you speak, it will translate what you say into Interlingua, compare with the current prompt, and score you. With any luck, I'll have this working before next week.
Here's the current English development corpus, with the Interlingua translations it produces:
i will take a beer | REQUEST beer |
give me a beer | REQUEST beer |
hello | NEUTRAL-GREETING |
good evening | EVENING-GREETING |
i would like a table for one | POLITE REQUEST TABLE 1 PERSON |
could i have a table for one | POLITE REQUEST TABLE 1 PERSON |
do you have a table for one | POLITE REQUEST TABLE 1 PERSON |
i would like a table for two | POLITE REQUEST TABLE 2 PERSON |
could i have a table for three | POLITE REQUEST TABLE 3 PERSON |
do you have a table for four | POLITE REQUEST TABLE 4 PERSON |
do you have a table outside | POLITE REQUEST TABLE outside |
is there a table outside | POLITE REQUEST TABLE outside |
could i have a table outside | POLITE REQUEST TABLE outside |
could we have a table by the window | POLITE REQUEST TABLE by-loc window |
do you have a table near the window | POLITE REQUEST TABLE in-loc window |
i 'd like a table in the smoking area | POLITE REQUEST TABLE smoking |
i 'd like a table in the non-smoking area | POLITE REQUEST TABLE non-smoking |
smoking please | POLITE REQUEST TABLE smoking |
non-smoking please | POLITE REQUEST TABLE non-smoking |
could i have a table in the corner | POLITE REQUEST TABLE in-loc corner |
can i have a table in the corner | POLITE REQUEST TABLE in-loc corner |
i would like a non-smoking table for one | POLITE REQUEST TABLE 1 PERSON non-smoking |
do you have a non-smoking table for one | POLITE REQUEST TABLE 1 PERSON non-smoking |
a non-smoking table for two please | POLITE REQUEST TABLE 2 PERSON non-smoking |
could i have a non-smoking table for three people | POLITE REQUEST TABLE 3 PERSON non-smoking |
i would like a table for three people in the smoking area | POLITE REQUEST TABLE 3 PERSON smoking |
i would like a table for four | POLITE REQUEST TABLE 4 PERSON |
do you have a table for four | POLITE REQUEST TABLE 4 PERSON |
i would like to reserve a table for seven o'clock | POLITE REQUEST TABLE 19 00 |
could i reserve a table for seven thirty | POLITE REQUEST TABLE 19 30 |
i 'd like to reserve a table for six forty five | POLITE REQUEST TABLE 18 45 |
i would like to reserve a table for two for seven fifteen | POLITE REQUEST TABLE 2 PERSON 19 15 |
could i reserve a table for two people for eight o'clock | POLITE REQUEST TABLE 2 PERSON 20 00 |
do you have a table for two at seven thirty | POLITE REQUEST TABLE 2 PERSON 19 30 |
could i reserve a table for seven o'clock tomorrow evening | POLITE REQUEST TABLE 19 00 time-evening date-tomorrow |
i would like to reserve a table for six forty five tomorrow please | parsing_failed |
could i reserve a table for two for tomorrow evening | POLITE REQUEST TABLE 2 PERSON time-evening date-tomorrow |
could i reserve a table for this evening | POLITE REQUEST TABLE time-evening date-today |
do you have a table for three tomorrow evening around seven o'clock | POLITE REQUEST TABLE 3 PERSON 19 00 time-evening date-tomorrow |
i have a reservation in the name of smith | parsing_failed |
i should have a reservation in the name of smith | parsing_failed |
could we see the menu | POLITE REQUEST menu |
i would like to see the menu | POLITE REQUEST menu |
could we get the menu | POLITE REQUEST menu |
could we have the bill | POLITE REQUEST check |
could we have the bill please | POLITE REQUEST check |
may i have the bill | POLITE REQUEST check |
may i have the check | POLITE REQUEST check |
could you give us the check please | POLITE REQUEST check |
could you give me a receipt | POLITE REQUEST receipt |
i would like a receipt please | POLITE REQUEST receipt |
could i get a receipt please | POLITE REQUEST receipt |
i would like a beer | POLITE REQUEST beer |
could we have two beers | POLITE REQUEST 2 beer |
could you give us two beers | POLITE REQUEST 2 beer |
could i have a latte | POLITE REQUEST latte |
i 'd like a medium latte | POLITE REQUEST medium latte |
a cup of tea please | POLITE REQUEST cup tea |
two cups of tea please | POLITE REQUEST 2 cup tea |
could we get two glasses of water | POLITE REQUEST 2 glass water |
i 'd like a glass of the house red | POLITE REQUEST glass house-red-wine |
could we have two glasses of the house red | POLITE REQUEST 2 glass house-red-wine |
i would like a large glass of white wine | POLITE REQUEST large glass white-wine |
i would like two small glasses of white wine | POLITE REQUEST 2 small glass white-wine |
i would like a pizza | POLITE REQUEST pizza |
i would like a hamburger | POLITE REQUEST hamburger |
i would like the soup | POLITE REQUEST soup |
i would like two pizzas | POLITE REQUEST 2 pizza |
Tuesday, 18 August 2009
Progress on CALL-SLT
>> i would like two beers
Source: i would like two beers
Target: POLITE REQUEST two beer
Other info:
n_parses = 1
parse_time = 0.047
source_representation = [(agent=[pronoun,i]), (null=[action,like]), (null=[modal,would]),
(null=[utterance_type,dcl]), (null=[voice,active]),
(object=[drink,beer]), (object=[spec,2])]
transfer_to_source_discourse_time = 0.0
source_discourse = [(null=[utterance_type,dcl]), (agent=[pronoun,i]), (null=[voice,active]),
(null=[modal,would]), (null=[action,like]), (object=[spec,2]),
(object=[drink,beer])]
resolved_source_discourse = [(null=[utterance_type,dcl]), (agent=[pronoun,i]),
(null=[voice,active]), (null=[modal,would]), (null=[action,like]),
(object=[spec,2]), (object=[drink,beer])]
resolution_processing = trivial
resolution_time = 0.0
transfer_to_interlingua_time = 0.0
interlingua = [(arg2=[drink,beer]), (arg2=[number,2]), (null=[politeness,polite]),
(null=[utterance_type,request])]
interlingua_surface = POLITE REQUEST two beer
interlingua_checking_time = 0.0
--- Performed command i would like two beers, time = 0.05 seconds
We are not far from having everything we need to be able to build and run an initial version of the CALL-SLT server. Originally, it will prompt in the surface interlingua. but I'll leave in a hook so that we can use the picture interlingua as soon as we have something available.
Sunday, 16 August 2009
CALL-SLT corpus
All contributions very gratefully received - and don't worry that you might break something accidentally, Google Docs has excellent facilities for tracking revisions and if necessary reverting to earlier versions.
Here's a sample extract showing what the corpus looks like:
Fre: auriez-vous une table sur la terrasse (SVP) ?
Fre: auriez-vous une table en terrasse ?
Eng: do you have a table outside
Eng: is there a table outside
Eng: could i have a table outside
Int: POLITE REQUEST LOCATION-TABLE LOCATION-OUTSIDE [note: is "en terrasse" different from "outside"?]
Fre: auriez-vous une table près de la fenêtre (SVP) ?
Fre: auriez-vous une table à côté de la fenêtre (SVP) ?
Jap: mado gawa no seki wa ari masu ka
Eng: could we have a table by the window
Eng: do you have a table near the window
Int: POLITE REQUEST LOCATION-TABLE NEAR WINDOW
Fre: auriez-vous une table non-fumeur/fumeur (SVP)?
Fre: auriez-vous une table dans la zone non-fumeur /fumeur (SVP)?
Fre: auriez-vous une table dans la section non-fumeur/fumeur (SVP)?
Jap: kinenseki wa ari masu ka
Eng: i 'd like a table in the smoking area
Eng: i 'd like a table in the non-smoking area
Eng: smoking please
Eng: non-smoking please
Int: POLITE REQUEST LOCATION-TABLE IN SMOKING-AREA
Int: POLITE REQUEST LOCATION-TABLE IN NON-SMOKING-AREA
Fre: auriez-vous une table dans le coin (SVP) ?
Jap: oku no seki wa ari masu ka
Jap: oku no teeburu wa ari masu ka
Eng: could i have a table in the corner
Int: POLITE REQUEST LOCATION-TABLE IN CORNER
First CALL-SLT meeting
The initial prototype will work as follows. At each turn, the system prompts the student with a description of what they are supposed to say, formulated in a version of the Interlingua. The student will attempt to speak it in the L2 (the language they are trying to learn). The system applies speech recognition to the student's utterance, then tries to translate the result into the interlingua. Finally, it compares the translated interlingua with the one used to prompt the student, and gives them feedback on how they did. Here are more details:
- Prompting in Interlingua. In the first version, the interlingua will be shown to the student in a text-based form, using the methods we've developed under MedSLT. So for example, the system might show the student
POLITE REQUEST TABLE 3 PERSON TIME 19:30
expecting the student to say something like
I would like to reserve a table for three people at seven thirty
or whatever the equivalent is in the L2 they are using. - As soon as we've figured out a good way to do it, we would like to be able to present the interlingua prompt in graphical form. So here, we might have a picture that could be described as
Scene:
Client is talking to waiter.
Speech bubble from client.
Inside speech bubble:
three chairs around a restaurant table;
large clock in background shows 19:30 - All speech input to the system will be logged in the usual way. We will have a registration process which allows us to associate each recorded utterance with meta-data which in particular will specify whether or not the utterance was recorded by a native speaker, and whether or not speech recognition got it right.
- When the system has compared the student's interlingua with the prompt interlingua, there are two simple ways for it to give helpful feedback. The first is to present both versions of the interlingua, highlighting the elements that are different. For instance, in the example above, if the system recognized
Could I have a table for two people at seven thirty
then the system would present the prompt and recognized interlinguas roughly as follows:
POLITE REQUEST TABLE *3* PERSON TIME 19:30
POLITE REQUEST TABLE *2* PERSON TIME 19:30
The second way to give help will be to play an example of a native speaker saying some version of the sentence in the L2, if such an example already exists. - The prompt selection module will have hooks allowing specification of a strategy. A simple strategy we will implement soon is to choose the prompt from a list of examples where there is a recorded example of a native speaker saying the prompt in the L2, possibly with some other constraints. This will make it easy for a teacher to create a lesson. They will first interact with the system in the L2, to create a set of recorded examples which work correctly. When the student logs on, the system will then be set to select prompts matching the teacher's examples.
- The functionality will be bundled up as a Prolog-based server, which does most of the processing, and will connect to a lightweight Java-based GUI which presents a client view. The server will initially handle two messages: (1) NEXT_EXAMPLE, returning a new interlingua prompt with associated information, and (2) RECOGNISE, prompting the student to speak, carrying out recognition, and returning the pieces of information produced by carrying out the interlingua comparison process.
Monday, 10 August 2009
Initial English recognizer for CALL-SLT (Part 2)
i would like two beers
could i have a pizza
There is language for reserving tables, e.g.
do you have a table for two at seven thirty
could i have a non-smoking table for three people
I've also added a few more things like asking for the menu and the check. If I could say all this stuff in a language I didn't already know, say Chinese, I'd really feel I'd learned something useful!
Initial English recognizer for CALL-SLT
If you want more details, here are the corpus and the domain lexicon.
Friday, 7 August 2009
Initial French recognizer for CALL-SLT
If people want to look at the CALL-SLT files, they're at http://callslt.cvs.sourceforge.net/viewvc/callslt/CALL-SLT/
Tuesday, 4 August 2009
Adding Romance to Regulus (part 2)
So far, the CALL-SLT files are pretty much the same as the MedSLT files they were adapted from. I'm assuming Pierrette will make the necessary changes! I checked that you can get as far as building a Nuance grammar... it all worked fine for me, but let me know if there are problems.
Monday, 3 August 2009
Adding Romance to Regulus
I've adjusted the MedSLT config files for Fre, Spa and Cat to point to the new files. All three languages still appear to build correctly in the AFF (role-marked semantics) versions. I have not done anything with the old (linear semantics) versions, which I am now assuming are obsolete.
All three languages appeared to build fine when I tested, but Pierrette will probably want to check things more carefully. If there are problems, please me know - they should be easy to fix.
The payoff is that I will now be able to construct a config file for the French version of CALL-SLT. Coming up next.
Sunday, 26 July 2009
Treebank caching and preferences
I've just checked in new code which stores the preferences used to create the treebank, and compares them with the current preferences. If the two are different, the treebank is regenerated. It would be nice if we could only regenerate the part that might be affected by the changed preferences, but that's unfortunately very difficult to do.
Monday, 20 July 2009
Regulus for DORIS, continued
Regulus for DORIS
[[dcl,
quant(def_sing, A, [[book,A],[color,A,red]],
quant(def_sing, B,
[[desk,B]],
quant(exist,C,[[be_on_loc,C,A,B],[tense,C,present]],true)))]]
If people want to look at the details, the files are checked in at http://regulus.cvs.sourceforge.net/viewvc/regulus/Regulus/Examples/Doris/. The interesting ones are the lexicon, at http://regulus.cvs.sourceforge.net/viewvc/regulus/Regulus/Examples/Doris/Regulus/doris_lex.regulus, and the corpus, at http://regulus.cvs.sourceforge.net/viewvc/regulus/Regulus/Examples/Doris/corpora/doris_corpus.pl
Friday, 10 July 2009
First steps in Bridge system
who has the queen of clubs
who bid one no trump
is two clubs a transfer
cover the ten with the jack
can you finesse in diamonds
can you make if spades are four one
We tried compiling a recognizer using the Australian English package, and, with Cathy's Australian voice, recognition is anecdotally quite good. (I have discovered that the difference between British English and Australian English is substantial). We will be adding more coverage over the weekend. Next week, I hope we'll be able to start thinking concretely about how to hook up the Regulus components with BASSINET, Leon Stirling's Bridge program, to produce a first cut at an end-to-end system that can respond to spoken questions and commands.
As we expected, the Bridge domain is quite a lot more more complex than anything we have tried so far in Regulus. It will definitely stretch us!
Tuesday, 9 June 2009
Update on SHRD2 paraphrasing
Even though the "logic English" paraphrases seem very similar to the scoped logical representations, it in fact turns out that judging paraphrases is a lot faster. Even for me, knowing all the representations from having worked on them, judging paraphrases took 29 minutes, against 22 minutes for judging structures. For Beth Ann, who didn't know the datastructures previously, paraphrases were more than twice as quick. Part of the payoff comes from the fact that the paraphrase grammar acts as a filter; most ill-formed structures produce no paraphrase, hence don't need to be judged at all when paraphrases are used.
One person in the workshop audience said he was pleased to see a paper about software engineering which actually contained an experiment! Beth Ann was clearly right to insist that we do this, and work out the methodology.
Sunday, 24 May 2009
First version of paraphrase grammar for SHRD2
>> pick up a big red block
Old state: []
LF: [[imp,
form(imperative,
[[pick_up,term(pro,you,[]),term(a,block,[[size,big],[color,red]]),up]])]]
Intermediate 1: [[imp,
scoping_unit([modal, imperative,
term(event_exists, A,
[[pick_up, A, term(pro,B,[[you,B]]),
term(a,C,[[block,C],[size,C,big],[color,C,red]]), up]])])]]
Intermediate 2: [[imp,
quant(pro, A, [[you,A]],
quant(a, B,
[[block,B],[size,B,big],[color,B,red]],
imperative(quant(event_exists,C,[[pick_up,C,A,B,up]],true))))]]
Intermediate 3: [[imp,
quant(pro, A, [[you,A]],
quant(a, B,
[[block,B],[size,B,big],[color,B,red]],
imperative(quant(event_exists,C,[[pick_up,C,A,B]],true))))]]
Dialogue move: [[imp,
quant(exist, A, [[you,A]],
quant(exist, B,
[[block,B],[size,B,big],[color,B,red]],
imperative(quant(exist,C,[[pick_up,C,A,B]],true))))]]
Paraphrase: COMMAND there is an A SUCH THAT you are A AND there is a B SUCH THAT B is a block AND B is big AND B is red AND MAKE IT TRUE THAT there is a C SUCH THAT C is that A picks up B
Abstract action: say(i_dont_understand,present)
Thursday, 21 May 2009
Multiple processing stages in dialogue top-level
Here's a text example from SHRD2:
>> is the large red block in the box
Old state: []
LF: [[ynq,
form(present,
[[be, term(the_sing,block,[[size,large],[color,red]]),
[in_loc,term(the_sing,box,[])]]])]]
Intermediate 1: [[ynq,
scoping_unit(term(event_exists, A,
[[be, A,
term(the_sing, B,
[[block,B],[size,B,large],[color,B,red]]),
[in_loc,term(the_sing,C,[[box,C]])]],
[tense,A,present]]))]]
Intermediate 2: [[ynq,
quant(the_sing, A, [[block,A],[size,A,large],[color,A,red]],
quant(the_sing, B, [[box,B]],
quant(event_exists, C,
[[be,C,A,[in_loc,B]],[tense,C,present]], true)))]]
Dialogue move: [[ynq,
quant(the_sing, A, [[block,A],[size,A,big],[color,A,red]],
quant(the_sing, B, [[box,B]],
quant(event_exists,C,[[be_in_loc,C,A,B],[tense,C,present]],true)))]]
Abstract action: say(i_dont_understand,present)
Concrete action: tts(sorry, I don't understand)
New state: []
Intermediate 1 is after addition of variables; Intermediate 2 is after scoping; and Dialogue move is after rewriting of lexical predicates. This last step is still very primitive.
Wednesday, 20 May 2009
"Pick up a big red block", revisited
>> RECOGNISE
(Take next loop input from live speech)
Recognised: recognition_succeeded([rec_result(62,pick up a big red block,...)
Old state: []
LF: [[imp,
form(imperative,
[[pick_up,term(pro,you,[]),term(a,block,[[size,big],[color,red]]),up]])]]
Dialogue move: [[imp,
quant(pro, A, [[you,A]],
quant(a, B,
[[block,B],[size,B,big],[color,B,red]],
imperative(quant(event_exists,C,[[pick_up,C,A,B,up]],true))))]]
Abstract action: say(i_dont_understand,present)
Concrete action: tts(sorry, I don't understand)
New state: []
Dialogue processing time: 0.01 seconds
Obviously, there's plenty more left to do before we have anything resembling a complete system. In particular, there is as yet no reference resolution or dialogue management, so it can't react to the commands and questions in any way. But, all things considered, I think we're making reasonable progress.
Sunday, 17 May 2009
CAT and FEAT commands
>> CAT p
(Display information for specified category)
Features for category "p": [def,obj_sem_n_type,postposition,sem,sem_p_type,sem_pp_type]
--- Performed command CAT p, time = 0.00 seconds
>> FEAT sem_p_type
(Display information for specified feature)
Feature values for feature "sem_p_type": [[back,down,none,normal,off,onoff,over,up,updown]]
--- Performed command FEAT sem_p_type, time = 0.00 seconds
SHRD2
Well... so why not do something about it? Stage 1 is to build a speech-enabled, and hopefully rather more robust reconstruction of SHRDLU, using Regulus. Some initial stuff is already checked in under $REGULUS/Examples/SHRD2. When we've satisfied ourselves that we can handle the Blocks World, Stage 2 will be to define a new and more ambitious domain - something which will hopefully demonstrate that there has in fact been significant progress since the 70s.
I'll be posting more about this soon. So far, SHRD2 has already turned up some important holes in the general English grammar, which I'm working on fixing.
Showing missing vocabulary in EBL_TREEBANK
>> EBL_TREEBANK
(Parse all sentences in current EBL training set into treebank form)
--- Read parsing history file (114 records) d:/cygwin/home/speech/regulus/examples/shrd2/generated/shrd2_parsing_history.pl
--- Incremental treebanking switched off, not trying to convert treebank
Parsing corpus data in d:/cygwin/home/speech/regulus/examples/shrd2/corpora/shrdlu_corpus.pl:
..
*** Parsing failed for: "find a block which is taller than the one you are holding and put it into the box", line 2
...
*** Parsing failed for: "is at least one of them narrower than the one which i told you to pick up", line 6
Words not in current vocabulary: [told]
.....
*** Parsing failed for: "will you please stack up both of the red blocks and either a green cube or a pyramid", line 12
Words not in current vocabulary: [either]
...
Blog Archive
-
▼
2009
(39)
-
►
August
(13)
- CALL-SLT and Japanese
- CALL-SLT and French
- Progress on CALL-SLT
- Progress on CALL-SLT
- Progress on CALL-SLT
- Progress on CALL-SLT
- CALL-SLT corpus
- First CALL-SLT meeting
- Initial English recognizer for CALL-SLT (Part 2)
- Initial English recognizer for CALL-SLT
- Initial French recognizer for CALL-SLT
- Adding Romance to Regulus (part 2)
- Adding Romance to Regulus
-
►
August
(13)